我试图在AngularJS中设置一个手表,我显然做错了,但我不太清楚。手表在直接页面加载时触发,但是当我更改观看值时,它不会触发。为了纪录,我还在匿名函数上设置了返回观察变量的手表,但是我有完全相同的结果。
我已经安装了一个最小的例子,在控制器中做所有的事情。如果它有所作为,我的实际代码被挂接在指令中,但是两者都以相同的方式失败。我觉得有一些基本的东西我失踪了,但我只是看不到它。
HTML:
<div ng-app="testApp"> <div ng-controller="testCtrl"> </div> </div>
JS:
var app = angular.module('testApp',[]); function testCtrl($scope) { $scope.hello = 0; var t = setTimeout( function() { $scope.hello++; console.log($scope.hello); },5000); $scope.$watch('hello',function() { console.log('watch!'); }); }
超时工作,你好,但手表不起火。
这是因为您更新了值,而不知道。
你应该使用$ timeout服务而不是setTimeout,你不需要担心这个问题。
function testCtrl($scope,$timeout) { $scope.hello = 0; var t = $timeout( function() { $scope.hello++; console.log($scope.hello); },function() { console.log('watch!'); }); }
或者你可以调用$ scope。$ apply();强制有角度重新检查值,并在必要时调用手表。
var t = setTimeout( function() { $scope.hello++; console.log($scope.hello); $scope.$apply(); },5000);