AgD*_*ude 6 angularjs angularjs-directive
我无法捕获像这样发送的事件:
document.body.dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)
下面的指令是在一个div,在身体内:
.directive('myDirective',function(){
return {
restrict: 'A',
link: function(scope, element, attrs, pageCtrl){
element.bind('myEvent', function(){
console.log('caught my event!');
});
}
};
});
Run Code Online (Sandbox Code Playgroud)
如果在div上使用triggerHandler发送事件,则此方法有效.
event = new Event('myEvent');
elem.triggerHandler(event);
Run Code Online (Sandbox Code Playgroud)
如何在指令内的文档主体上捕获自定义事件?
更新: 这是用于Cordova应用程序,带有现有插件,可在document.body上调度事件.那么有另一种方法可以在div的指令中捕获这些事件吗?
问题是,事件的泡沫,当你从document.body的调度事件的意义,它传播了通过它的祖先.由于它不会通过它的后代传播,因此你的指令的事件监听器永远不会被触发.
但是,您可以使用Angular的内部事件系统捕获身体上的事件并触发您的div.
一个body用以下行为装饰元素:
.directive('bodyDirective',function($rootScope){
return {
restrict: 'A',
link: function(scope, element, attrs){
element.bind('myEvent', function(){
$rootScope.$broadcast('cordovaEvent');
});
}
};
})
Run Code Online (Sandbox Code Playgroud)
...和另一个装饰div将捕获Angular事件的with行为:
.directive('divDirective', function(){
return {
restrict: 'A',
link: function(scope, element, attrs) {
scope.$on('cordovaEvent', function(){
// do something here
});
}
}
})
Run Code Online (Sandbox Code Playgroud)
Plunker(您必须在单独的窗口中查看预览并在那里观看控制台)
| 归档时间: |
|
| 查看次数: |
14235 次 |
| 最近记录: |