首页 > 解决方案 > AngularJS:在子范围内更改时未调用 $watch

问题描述

我有以下情况:在我的父范围内,我定义了一个名为 rule 的对象,其属性名为“keyword”。在这个关键字上,我设置了一个观察者:

$scope.$watch("rule.keyword", function(newKeyword){...});

现在, rule.keyword 由子范围找到并由子范围更改。例如,这可以通过 ui-select 或简单的文本框发生。

尽管如此,观察者并没有调用它的函数,但是在父作用域中,变量具有正确的值,在子作用域中设置。

任何人都有一个想法,为什么观察者没有开火?

谢谢!

标签: angularjsangularjs-scope

解决方案


您只能在父范围内触发观察者,如下所示:

$scope.$parent.$watch('property', function(value){...});

但是,如果您希望在两个范围内触发观察程序,则必须通过更新其在父范围和子范围中的值来使 $scope 变量引用同一个对象。

function ParentCtrl($scope) {
  $scope.rule = {ruleValue: val};
}

function ChildCtrl($scope) {
  $scope.update = function(ruleValue) {
    $scope.rule.keyword = ruleValue;
  };
}

推荐阅读