想知道是否有一种角度来观察像变量
这样的函数function foo() {
console.log("foo called");
}
$scope.$watch('foo', function {
console.log("foo watched");
});
因此,如果语法正确,将“foo watched”打印到控制台,如果没有,是否有办法让该监视功能运行?
修改
将问题重新格式化为我需要的更多内容:
假设我有一个按钮和一个文本输入,每个都由不同的控制器处理,比如btnCtrl
和txtCtrl
还有一个布尔全局标志存储为$scope.flag
,它改变了输入的验证标准。
//btnCtrl
//called on button click
function onButtonClick() {
$scope.flag = !$scope.flag
}
//txtCtrl
//called on input change
function onInputChange() {
handleValidations()
}
function handleValidations() {
//set error indicator on invalid input
//valid input changes based on $scope.flag value
if($scope.flag) {
//check validation1
} else {
//check validation2
}
}
我希望在更改handleValidations
时检查输入框验证$scope.flag
。 $scope.flag
经常不是通过按钮更改,而是通过其他功能更改。
因此,我想在handleValidations
更改时调用$scope.flag
,但调用onButtonClick
时。最好的方法是什么?
我最初的想法是在$scope.$watch
上添加某种onButtonClick
。
答案 0 :(得分:1)
您可以观看这些功能。你试过运行代码吗?如果你调用foo,它应该打印两个控制台语句。但是,有一个用于观看功能的“问题”,mastering $watch in Angularjs
这里要注意的一个关键方面是,如果表达式被评估为函数,那么该函数需要是幂等的。换句话说,对于同一组输入,它应该总是返回相同的输出。如果不是这种情况,Angular将假设正在观看的数据已发生变化。反过来,这意味着它将继续检测差异并在摘要周期的每次迭代时调用监听器。
答案 1 :(得分:0)
在评论和其他答案的帮助下:
我使用$rootscope
中的btnCtrl
发送了一条本地消息,并向txtCtrl
添加了一个调用handleValidations
谢谢大家的帮助