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

nor*_*tpy 4 javascript angularjs ng-bind

为什么这个小角度模块在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>
Run Code Online (Sandbox Code Playgroud)

我期待在5秒之后输出Hello Jon因它保持不变而改变Hello Whirled.为什么是这样?我还需要做其他事吗?

K.T*_*ess 11

使用$interval服务吧

这里的Angular的window.setInterval包装器是DOC

$interval(function(){
     vm.name = 'Jon';
}, 1000);
Run Code Online (Sandbox Code Playgroud)

别忘了注入$interval,

.controller('ExampleController', ['$scope', $interval, function($scope, $interval) { ....
Run Code Online (Sandbox Code Playgroud)

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


或使用 $scope.$apply()

window.setInterval(function(){
    vm.name = 'Jon';
    $scope.$apply();
}, 5000);
Run Code Online (Sandbox Code Playgroud)

$ apply可以将更改与摘要周期集成

这个答案会有所帮助