关于javascript:为什么AngularJS ng-bind不会更新视图

Why AngularJS ng-bind does not update the view

ng-bind属性改变时,为什么这个小角度模块不能更新视图?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<body ng-app="bindExample">


  angular.module('bindExample', [])
    .controller('ExampleController', ['$scope', function($scope) {
      var vm = this;
      vm.name = 'Whirled';
      window.setInterval(function(){ vm.name = 'Jon';}, 5000);
    }]);



    Hello <span ng-bind="vm.name"></span>!

</body>

我希望在5秒钟后,输出更改Hello Jon保持在Hello Whirled。为什么会这样?我还需要做什么吗?


使用$interval服务ITS

Angular's wrapper for window.setInterval here is the DOC

1
2
3
$interval(function(){
     vm.name = 'Jon';
}, 1000);

别忘了注射EDOCX1[0]as,

1
.controller('ExampleController', ['$scope', $interval, function($scope, $interval) { ....

当使用setInterval时,它超出了角度范围,所以你需要在这里使用$interval$interval是针对范围执行的,

或者使用$scope.$apply()

1
2
3
4
window.setInterval(function(){
    vm.name = 'Jon';
    $scope.$apply();
}, 5000);

$apply enables to integrate changes with the digest cycle

这个答案会有帮助的


是的,使用$interval是一种解决方案。通常,您会在$scope的方法属性上更改模型。因此,Angular将负责更新视图。如果在指令内使用jquery回调,则必须使用scope.$apply,以便angular知道发生了什么。