2014-02-21 37 views
2

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

我有文檔級別的事件,所以我需要捕捉角度控制器中的事件,這可能嗎?

更新

我有獨立的js與相機的一些動作的處理文件。

document.addEventListener('myCameraEvent', handleMyCameraEvent); 

我想在角控制器或指令中觸發此事件。任何人都可以解釋,怎麼可能實現角?

+1

這通常是通過指令完成的。你想要對這些事件做什麼? – package

+0

您需要在html級別設置控制器函數,例如ng-click = fn(),或者通過指令作爲Package提到 – V31

+0

@包,我已經存在名爲myCustomEvent的事件,在文檔中註冊。我想觸發這個事件的時間,並從這個事件得到一些價值 – havenchyk

回答

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);,它可以將處理程序註冊到特定事件以抽象出事件名稱。

+0

偉大的答案,我會嘗試 – havenchyk