如何捕捉角度控制器中的事件?
我有文档级事件,所以我需要在角度控制器中捕获事件,是否可能?
更新
我有独立的js文件,处理来自相机的一些操作。
document.addEventListener('myCameraEvent', handleMyCameraEvent);
我想在角度控制器或指令中触发此事件。任何人都可以解释一下,如何用angular实现?
答案 0 :(得分:2)
这是一个通用的自定义事件观察服务:
.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);
,它会将处理程序注册到特定事件以抽象出事件名称。