为什么 AngularJS ng-bind 不更新视图

Why AngularJS ng-bind does not update the view

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

<body ng-app="bindExample">

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

<div ng-controller="ExampleController as vm">
    Hello <span ng-bind="vm.name"></span>!
</div>
</body>

我预计 5 秒后输出会发生变化 Hello Jon,因为它保持在 Hello Whirled。为什么是这样?我还需要做其他事情吗?

使用$interval服务其

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

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

别忘了注入 $interval as,

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

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


或使用$scope.$apply()

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

$apply enables to integrate changes with the digest cycle

this answer would be helpful

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