来自控制器调用的AngularJS Trigger指令

bad*_*oum 10 angularjs angularjs-directive

我想触发一个包含jQuery指令的AngularJS自定义指令.怎么做到呢?我在指令中读过有关emit函数的内容吗?

想法?

Jer*_*ess 24

您可以使用服务在控制器和指令之间进行通信.

服务可能如下所示:

app.service("directiveService", function() {
    var listeners = [];
    return {
        subscribe: function(callback) {
            listeners.push(callback);
        },
        publish: function(msg) {
            angular.forEach(listeners, function(value, key) {
                value(msg);
            });
        }
    };
});
Run Code Online (Sandbox Code Playgroud)

该指令可以响应该服务:

app.directive("jQueryDirective", function(directiveService) {
    directiveService.subscribe(function(msg) {
        // pretend this is jQuery 
        document.getElementById("example")
        .innerHTML = msg;
    });
    return {
        restrict: 'E'        
    };
});
Run Code Online (Sandbox Code Playgroud)

只是替换我为jQuery操作所做的事情,你应该拥有你需要的东西.

这是一个工作小提琴:http://jsfiddle.net/jeremylikness/wqXYx/

  • Broadcast创建了对$ scope以及$ scope hiearchy的依赖.如果你依赖于你,你可以调用很多可能对消息感兴趣的侦听器,而显式服务只针对需要它的组件.它还使测试更容易,并且可重复使用且独立. (3认同)