Angular文档显示了此测试用例。
// let's assume that scope was dependency injected as the $rootScope
var scope = $rootScope;
scope.name = 'misko';
scope.counter = 0;
expect(scope.counter).toEqual(0);
scope.$watch('name', function(newValue, oldValue) {
scope.counter = scope.counter + 1;
});
expect(scope.counter).toEqual(0);
scope.$digest();
// no variable change
expect(scope.counter).toEqual(0);
您可以在此处看到scope.name
在添加$watch
之前设置,并且该计数器保持为零。
我无法在jsFiddle中重现这一点。
http://jsfiddle.net/thinkingmedia/3ttKV/
我希望这段代码第一次不会显示警告。只有在名称更改时才会触发。
$scope.name = 'Nick';
$scope.$watch('name',function(){
alert('name changed');
});
我如何按照文档记录这项工作。我需要使用一些默认值设置我的范围,并且除非更改它们,否则不会触发观察者。
答案 0 :(得分:4)
在初始化观察者时将调用侦听器,在这种情况下,newValue === oldValue,因此您需要检查如下:
$scope.name = 'Nick';
$scope.$watch('name',function(newValue, oldValue){
if (newValue !== oldValue) {
alert('name changed');
}
});