angularjs – $emit与回调在父子指令通信最佳方法
我试图了解什么是最好的GENERIC方法与孤立的范围(它们可能是可重复使用的项目)的父子指令之间进行通信.
这意味着如果子指令需要以某种方式更新父指令(都有隔离范围), 例如: .directive('filterReviewStepBox',function () { return { restrict: 'EA',scop: { //some data },template: '<div>text<reusable-dir></reusable-dir call-back="foo"></div>',link: function (scope,elem,attrs) { scope.foo = function () { console.log('bar'); }; } }; }).directive('reusableDir',scope: { callBack: '=callBack' //other data },template: '<div>text<button type="button" ng-click="bar"></button></div>',attrs) { scope.bar = function () { scope.callBack(); } } }; }); 或者我应该使用$emit(): 例如: directive('filterReviewStepBox',function () { return { restrict: 'EA',scope: { // some data },template: '<div>text<reusable-dir></reusable-dir></div>',attrs) { scope.$on('foo',function () { console.log('bar'); }); } }; }).directive('reusableDir',scope: { //some data },attrs) { scope.bar = function () { scope.$emit('foo'); }; } }; }); 我觉得发射会更容易理解,但担心性能和开销,但我仍然不确定 试图在线寻找最好的方法,但我仍然踩踏 编辑 我忘了
选项.
就个人而言,我尽量避免生成自己的自定义事件.主要是因为容易引起不必要的事件传播或冒泡(通常导致不必要的范围消化),而且由于系统的“噪音”,在更大的应用程序中可能变得非常难以管理.
除了我自己的个人看法外,如果这是您想要的更为“面向未来”的方法,那么回调方式是最安全的.这就是为什么… > Angular2鼓励开发人员从依赖于子对象通信的指令和组件中公开onChange属性.请注意,这些只是绑定函数,并且应在给定组件或指令的绑定或范围内相应地进行定义. 然而,没有提到的是,在AngularJS和Angular2中仍然建议通过服务进行通信. > ngOnChanges:https://angular.io/docs/js/latest/api/core/OnChanges-interface.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |