Comment attraper l'événement dans le contrôleur angulaire?
J'ai des événements de niveau de document, donc j'ai besoin d'attraper l'événement dans un contrôleur angulaire, est-ce possible?
Mettre à jour
J'ai un fichier js autonome avec la gestion de certaines actions de la caméra.
document.addEventListener('myCameraEvent', handleMyCameraEvent);
Et je veux déclencher cet événement dans un contrôleur ou une directive angulaire. Quelqu'un pourrait-il expliquer, comment est-il possible de mettre en œuvre avec angulaire?
Voici un service générique d'observation d'événements personnalisés:
.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); }); });
Dans votre contrôleur, vous l'utiliserez comme ceci:
.controller('MyCtrl', function($scope, Camera) { subscriber = Camera.subscribe('myCustomEvent', customEventHandler); function customEventHandler(event) { //process event //.. //if handler is not needed anymore, unsubscribe //subscriber.unsubscribe(); } })
Bien sûr, ce n'est qu'une idée générale. Vous voudrez peut-être avoir des méthodes spécifiques sur le service Caméra, par exemple Camera.onSnapshot(snapshothandler); Camera.onTurnOff(turnOffHandler);
Camera.onSnapshot(snapshothandler); Camera.onTurnOff(turnOffHandler);
Qui inscrirait les gestionnaires à des événements spécifiques pour abstraire les noms des événements.