加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – $emit与回调在父子指令通信最佳方法

发布时间:2020-12-17 09:28:33 所属栏目:安全 来源:网络整理
导读:我试图了解什么是最好的GENERIC方法与孤立的范围(它们可能是可重复使用的项目)的父子指令之间进行通信. 这意味着如果子指令需要以某种方式更新父指令(都有隔离范围), 我是不是该 传递一个回调函数: 例如: .directive('filterReviewStepBox',function () {
我试图了解什么是最好的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');
                };
            }
        };
    });

我觉得发射会更容易理解,但担心性能和开销,但我仍然不确定

试图在线寻找最好的方法,但我仍然踩踏

编辑

我忘了

require

选项.
但我仍然不确定这是最正确的解决方案.
由于这不允许我重新使用孩子或孙子,而是使指令成为一个单一目的的项目.

就个人而言,我尽量避免生成自己的自定义事件.主要是因为容易引起不必要的事件传播或冒泡(通常导致不必要的范围消化),而且由于系统的“噪音”,在更大的应用程序中可能变得非常难以管理.

除了我自己的个人看法外,如果这是您想要的更为“面向未来”的方法,那么回调方式是最安全的.这就是为什么…

> Angular2鼓励开发人员从依赖于子对象通信的指令和组件中公开onChange属性.请注意,这些只是绑定函数,并且应在给定组件或指令的绑定或范围内相应地进行定义.
>与上述类似,Angular2记录了一个ngOnChanges方法,可以由希望订阅其绑定更改的任何控制器定义.如果提供了这种方法,则会在任何DOM操作发生之前(使用新的绑定值)调用此方法,因此它是通过当前AngularJS $范围的更“通用”父级子进程的完美候选.

然而,没有提到的是,在AngularJS和Angular2中仍然建议通过服务进行通信.

> ngOnChanges:https://angular.io/docs/js/latest/api/core/OnChanges-interface.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读