在 AngularJS 中我们可以广播和监听事件:
$rootScope.$emit('myEvent',$scope.data);
$rootScope.$on('myEvent', function(event, data) {}
有没有办法监听组件内的事件?
我想要实现的是对表单内重复的一组组件执行一些操作。 Ng-repeat 当然会迭代某些模型。模型中的一些数据绑定到组件。将函数绑定到组件很容易,这样组件就可以执行一些逻辑,但是相反的方向似乎并不那么容易。
<div ng-repeat="someObject in mainModel.listOfObjects">
<someControl ng-model="someObject.foo"></someControl>
<custom-component ng-model="someObject.bar"></custom-component>
</div>
<someButton ng-click="executeActionOnAllCustomComponents()">
原文由 Arkadiusz Kałkus 发布,翻译遵循 CC BY-SA 4.0 许可协议
我认为您最好的选择是继续使用
$emit()
和$broadcast()
发出的标准事件。 angular 1.5 引入了一些新的 hooks 和 sintax,但在组件中你总是可以注入$rootScope
和$scope
,并像你在 angular < 1.5 中习惯的那样处理任何事件。模板:
父控制器:
组件:
另一种选择,如果你想检查你的模型的变化(从其他父范围,假设你的范围变量的单向绑定),是使用钩子
$doCheck
触发每个摘要循环,与旧的手表机制相反,您必须保存旧值并将其与新值进行比较。