我已经知道您可以在指令中设置控制器,而其他指令可以调用该控制器上的功能.以下是我当前的指令:
app.directive("foobar",function() { return { restrict: "A",controller: function($scope) { $scope.trigger = function() { // do stuff }; },link: function(scope,element) { // do more stuff } }; });
我知道我可以这样称呼:
app.directive("bazqux",require: "foobar",element,attrs,fooBarCtrl) { fooBarCtrl.trigger(); } }; });
但是,我想要能够从任何指令调用触发器,而不仅仅是我自己的定制触发器,如下所示:
<button ng-click="foobar.trigger()">Click me!</button>
如果这不行,有没有办法引入第三个指令来实现呢?喜欢这个?
<button ng-click="trigger()" target-directive="foobar">Click me!</button>
谢谢!
完成任何组件之间的应用程序范围通信的一种简单方法是使用全局事件(从$rootScope发出).例如:
JS:
app.directive('directiveA',function($rootScope) { return function(scope,attrs) { // You can attach event listeners in any place (controllers,too) $rootScope.$on('someEvent',function() { alert('Directive responds to a global event'); }); }; });
HTML:
<button ng-click="$emit('someEvent')">Click me!</button>
在这里,您从子范围发出一个事件,但最终会到达$rootScope并运行上一个监听器.
这是一个现场示例:http://plnkr.co/edit/CpKtR5R357tEP32loJuG?p=preview