在角度控制器中收听文档事件

问题描述:

如何在角度控制器中捕捉事件?在角度控制器中收听文档事件

我有文档级别的事件,所以我需要捕捉角度控制器中的事件,这可能吗?

更新

我有独立的js与相机的一些动作的处理文件。

document.addEventListener('myCameraEvent', handleMyCameraEvent); 

我想在角控制器或指令中触发此事件。任何人都可以解释,怎么可能实现角?

+1

这通常是通过指令完成的。你想要对这些事件做什么? – package

+0

您需要在html级别设置控制器函数,例如ng-click = fn(),或者通过指令作为Package提到 – V31

+0

@包,我已经存在名为myCustomEvent的事件,在文档中注册。我想触发这个事件的时间,并从这个事件得到一些价值 – havenchyk

这里有一个通用的自定义事件的观察者服务:

.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