新手问题,我阅读了rootscope.$watch
的文件。 $watch
的语法是
$watch(watchExpression, [listener], [objectEquality], [deregisterNotifier]);
但我看到这些例子使用它如下。
var food;
scope.foodCounter = 0;
expect(scope.foodCounter).toEqual(0);
scope.$watch(
// This is the listener function
function() { return food; },
// This is the change handler
function(newValue, oldValue) {
if ( newValue !== oldValue ) {
// Only increment the counter if the value changed
scope.foodCounter = scope.foodCounter + 1;
}
}
);
缺少WatchExpression
是什么意思?感谢。
答案 0 :(得分:1)
watchExpression既可以是字符串也可以是函数 - 请参阅问题中公布的angularjs文档。在问题中发布的示例将永远不会触发更改处理程序,因为food
始终未定义。
如果您将函数用作watchExpression,则该函数必须返回不同的值才能触发更改处理程序。正如angularjs官方文件中所述
在每个$ digest周期计算的表达式。改变了 返回值触发对侦听器的调用。
代码段
function Ctrl($scope) {
$scope.food = "Laksa";
$scope.foodCounter = 0;
$scope.$watch(
//this is watch expression using function
function (scope) {
return scope.food;
},
//this is listener - change handler
function (newValue, oldValue) {
console.log(newValue, oldValue);
if (newValue !== oldValue) {
// Only increment the counter if the value changed
$scope.foodCounter = $scope.foodCounter + 1;
}
});
}
示例 - http://jsfiddle.net/4atA2/2/
此侦听器功能相当于$scope.$watch('food',...
,因为它没有其他逻辑。您可以灵活地添加额外的逻辑检查,以决定是否要触发更改处理程序。例如,观察两个范围变量。
示例 - http://jsfiddle.net/5NLNa/5/
function (scope) {
if(scope.drink == "Milo") {
return scope.food;
}
},