angularJS - 你能看一个函数调用吗?

时间:2018-01-17 15:35:33

标签: angularjs

想知道是否有一种角度来观察像变量

这样的函数
function foo() {
    console.log("foo called");
}

$scope.$watch('foo', function {
    console.log("foo watched");
});

因此,如果语法正确,将“foo watched”打印到控制台,如果没有,是否有办法让该监视功能运行?

修改

将问题重新格式化为我需要的更多内容:

假设我有一个按钮和一个文本输入,每个都由不同的控制器处理,比如btnCtrltxtCtrl

还有一个布尔全局标志存储为$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

2 个答案:

答案 0 :(得分:1)

您可以观看这些功能。你试过运行代码吗?如果你调用foo,它应该打印两个控制台语句。但是,有一个用于观看功能的“问题”,mastering $watch in Angularjs

  

这里要注意的一个关键方面是,如果表达式被评估为函数,那么该函数需要是幂等的。换句话说,对于同一组输入,它应该总是返回相同的输出。如果不是这种情况,Angular将假设正在观看的数据已发生变化。反过来,这意味着它将继续检测差异并在摘要周期的每次迭代时调用监听器。

答案 1 :(得分:0)

在评论和其他答案的帮助下:

我使用$rootscope中的btnCtrl发送了一条本地消息,并向txtCtrl添加了一个调用handleValidations

的监听器

谢谢大家的帮助