AngularJS: $watch 在子作用域中发生变化时未被调用

AngularJS: $watch not called when changed in child scope

我遇到以下情况: 在我的父作用域中,我定义了一个名为 rule 的对象,它具有一个名为 "keyword" 的属性。在这个关键字上,我设置了一个观察者:

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

现在,rule.keyword 被子作用域找到并被子作用域更改。这可能发生,例如使用 ui-select 或简单的文本框。

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

有人知道为什么观察者不开火吗?

谢谢!

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

$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;
  };
}