AngularJS数据绑定不会更新,直到触发任意事件

时间:2014-08-18 16:59:00

标签: javascript jquery html angularjs

所以由于客户端限制,我无法真正摆脱这个问题,但一般来说我有一个双向数据绑定字符串,在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

上的双向绑定更新

1 个答案:

答案 0 :(得分:3)

您应该使用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) {
              //...
            });
      }
    };
}]);