angularjs - AngularJS:在子范围内更改时未调用 $watch
问题描述
我有以下情况:在我的父范围内,我定义了一个名为 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;
};
}
推荐阅读
- django - 是否可以“测量” django 模型实例的嵌套级别
- javascript - Watir Net::ReadTimeout (Net::ReadTimeout) => erreur javascript?
- kubernetes-helm - 如何在 Helm 生成的 yaml 文件中使用生成的秘密?
- java - 分治算法数组中的最大个数
- caching - 缓存:块大小和未命中率
- java - 在 Spring Boot 应用程序中获取 MySQL 语法错误
- c# - 为什么这个 switch 语句并不详尽?
- flutter - 颤动象征着执行时崩溃
- pyomo - 在 Pyomo 中更改 Bonmin 选项(IPOPT 线性求解器)
- javascript - 使网格方块更小而不是溢出容器