【发布时间】:2017-11-13 07:43:17
【问题描述】:
有 1 个 Angular 应用程序,带有 1 个父控制器和一个子控制器。 在 child 中,有 1 个 $watch WATCH-CHILD 用于 OBJ-CHILD,它会触发 $emit。 在父级中,有一个 $emit 的侦听器,我们将其称为 ON-LISTENER,还有一个用于 OBJ-PARENT 的 $watch WATCH-PARENT(它使用 true 作为第三个参数)。
当孩子的OBJ-CHILD改变时,触发WATCH-CHILD,触发$emit。 父侦听器 ON-LISTENER 被触发,并更改 OBJ-PARENT。它还设置了一些 $location 属性。 OBJ-PARENT 的 $watch WATCH-PARENT 从未被触发(即使值已更改),以及在浏览器 URL 中设置的 $location 属性未更改(我知道它们确实在 JavaScript 中更改,因为我打印它们)。
为了确保在 $digest 中调用 ON-LISTENER,我尝试在 ON-LISTENER 结束时调用 $digest,并得到了预期的异常。
知道我做错了什么吗?我希望 ON-LISTENER 中发生的更改会触发 WATCH-PARENT 和浏览器 URL 更改。
如果成功,我将尝试在 jsfiddle 上复制并编辑此帖子。
代码如下:
孩子:
$scope.$watch('vars.model', function(newValue, oldValue) {
console.log('model changed');
$scope.$emit('highlightChange', newValue);
}, true);
家长:
$scope.$watch('vars.model.highlight', function(newValue, oldValue) {
console.log('highlight changed');
}, true);
$scope.$on('highlightChange', function(event, value) {
console.log('listener', $scope.vars.model.highlight.categoryId, value.categoryId);
$location.search('category-id', value.categoryId);
$scope.vars.model.highlight.categoryId = value.categoryId;
}
【问题讨论】:
-
知道我做错了什么吗?:不,因为你没有发布任何代码。不要描述你的代码。发布它。
-
@yinonby 我没听错,你想听子变量变化吗?
标签: angularjs angularjs-controller angularjs-events