4

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. 为什么是这样?我还需要做其他事情吗?

4

2 回答 2

11

使用$interval服务

Angular 的 window.setInterval 包装器是DOC

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

不要忘记注入$interval

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

setInterval在角度范围之外使用它时,你需要在$interval这里使用。$interval是针对范围执行的,


或使用$scope.$apply()

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

$apply 可以将更改与摘要循环集成

这个答案会有所帮助

于 2015-02-10T09:01:06.243 回答
1

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

于 2015-02-10T09:09:28.357 回答