【问题标题】:AngularJS databinding not updating until arbitrary event is fired在触发任意事件之前,AngularJS 数据绑定不会更新
【发布时间】:2014-08-19 02:46:20
【问题描述】:

所以由于客户端限制,我无法真正解决这个问题,但一般来说,我有一个双向数据绑定字符串,在触发某些任意事件之前不会在 html 端更新(一旦任何按钮被点击然后它会更新,即使只是切换可见性的琐碎按钮也会更新它)。因此,如果我最初将 $scope.verifiedAddressed1 设置为等于“正在验证...”,它将数据绑定,但是一旦我将其更改为“1234 Cherry Lane”,它不会更新,直到我单击网页上的某个按钮。 html 部分看起来像这样

<p>{{verifiedAddressed1}}</p> // "verifying..."

虽然角度代码如下所示:

$scope.verifiedAddressed1 = "verifying...";
$scope.verifyAddress = function(isValid){
    if(isValid){
       $.get( "validURL.com", function( data ) {
                $scope.verifiedAddressed1 = data[0].validData;
                console.log($scope.verifiedAddressed1);         //"1234 Cherry Lane"
            });
        }, 400);
        setTimeout(function() {
            console.log($scope.verifiedAddressed1);             //"1234 Cherry Lane"

        }, 700);
    }
}

有没有人见过像这样的奇怪错误?我已经使用 AngularJS 有一段时间了,我知道这里和那里仍然存在很多小错误,尤其是在按钮点击和其他方面,但我相当确定这与按钮事件无关,因为任何页面上的按钮将激活verifiedAddressed1上的双向绑定更新

【问题讨论】:

  • 范围由 jQuery 回调更新。您需要致电$scope.$apply()。但最好使用$http 进行ajax 调用。
  • @AnthonyChu 感谢您提供快速而明显的解决方案。我需要停止混合 jquery 和 Angular!
  • 是的,请开始以角度思考,让自己的生活更轻松。顺便说一句,也使用 $timeout 服务而不是 setTimeout。 docs.angularjs.org/api/ng/service/$timeout

标签: javascript jquery html angularjs


【解决方案1】:

您应该使用 Angular 的服务来保持范​​围在您期望的时候更新。代替$.get,使用$http.get,代替setTimeout,使用$timeout(但仅适用于您确实需要在更新循环之外工作时)。从来没有真正的理由自己打电话给$scope.$apply - 如果你正确使用角度,范围将保持更新。

myApp.controller('MyController', ['$scope', '$http',
  function ($scope, $http) {
    $scope.verifyAddress = function (isValid) {
      if (isValid) {
          $http.get('validURL.com')
            .success(function (data) {
              //...
            })
            .error(function (data, status) {
              //...
            });
      }
    };
}]);

【讨论】:

    猜你喜欢
    • 2017-12-10
    • 2011-06-03
    • 1970-01-01
    • 2013-07-02
    • 2014-11-15
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多