在角度控制器中收听文档事件
问题描述:
如何在角度控制器中捕捉事件?在角度控制器中收听文档事件
我有文档级别的事件,所以我需要捕捉角度控制器中的事件,这可能吗?
更新
我有独立的js与相机的一些动作的处理文件。
document.addEventListener('myCameraEvent', handleMyCameraEvent);
我想在角控制器或指令中触发此事件。任何人都可以解释,怎么可能实现角?
答
这里有一个通用的自定义事件的观察者服务:
.service('Camera', function($document) {
//map of current subscribers
var subscribers = {};
//notifies all subscribers of particular event type
function notify(event) {
var handlers = subscribers[event.type] || [];
for (var i = 0; i < handlers.length; i++) {
handlers(i)(event);
}
}
//adds new handler to subscribers list
//returns object with unsubscribe() method
this.subscribe(eventType, handler) {
var handlers = subscribers[eventType] || [];
handlers.push(handler);
return (function(type, index) {
return {
unsubscribe: function() {
subscribers[type].splice(index);
}
}
})(eventType, handlers.length - 1);
}
//register custom events
$document.on('myCameraEvent', function(event) {
notify(event);
});
$document.on('myOtherCameraEvent', function(event) {
notify(event);
});
});
在你的控制,你会使用这样的:
.controller('MyCtrl', function($scope, Camera) {
subscriber = Camera.subscribe('myCustomEvent', customEventHandler);
function customEventHandler(event) {
//process event
//..
//if handler is not needed anymore, unsubscribe
//subscriber.unsubscribe();
}
})
当然,这只是一般的想法。您可能想要在Camera服务上使用特定的方法,例如Camera.onSnapshot(snapshothandler); Camera.onTurnOff(turnOffHandler);
,它可以将处理程序注册到特定事件以抽象出事件名称。
+0
伟大的答案,我会尝试 – havenchyk
这通常是通过指令完成的。你想要对这些事件做什么? – package
您需要在html级别设置控制器函数,例如ng-click = fn(),或者通过指令作为Package提到 – V31
@包,我已经存在名为myCustomEvent的事件,在文档中注册。我想触发这个事件的时间,并从这个事件得到一些价值 – havenchyk