AngularJS:$ watch在子范围内更改时未调用

时间:2018-05-07 08:54:42

标签: angularjs angularjs-scope

我有以下情况: 在我的父作用域中,我定义了一个名为rule的对象,其中包含一个名为“keyword”的属性。在这个关键字上,我正在设置一个观察者:

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

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

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

任何人都有一个想法,观察者为什么不解雇?

谢谢!

1 个答案:

答案 0 :(得分:1)

您只能按以下方式触发父作用域中的观察者:

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