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

问题描述 投票:2回答:2

想知道是否有一种角度方式来观察像变量那样的函数

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

angularjs
2个回答
1
投票

你可以看这些功能。你试过运行代码吗?如果你调用foo,它应该打印两个控制台语句。然而,有一个'gotcha'用于观看功能,mastering $watch in Angularjs

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


0
投票

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

我使用来自$rootscopebtnCtrl发送了一条本地消息,并添加了一个调用txtCtrlhandleValidations的监听器

谢谢大家的帮助

© www.soinside.com 2019 - 2024. All rights reserved.