Advertisement
lukicdarkoo

Angular ObserverService

Feb 20th, 2015
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * Usage
  3.  * -----
  4.  *
  5.  * **Basic usage**
  6.  * observer = Object.create(ObserverService);
  7.  * observer.register('eventName', callback);
  8.  * observer.notify('eventName', paramsToPass);
  9.  */
  10.  
  11. angular.module('lukicdarkoo.observer', []).factory('ObserverService', function() {
  12.     var obj = {};
  13.    
  14.     obj.register = register;
  15.     obj.notify = notify;
  16.    
  17.     ////////////////////
  18.    
  19.     var observers = [];
  20.    
  21.     function register(_type, _callback, _useLoaded, _id) {
  22.         // Collect garbage (unused observers)
  23.         if (angular.isDefined(_id)) {
  24.             for (var i = 0; i < observers.length; i++) {
  25.                 if (observers[i].id === _id) {
  26.                     observers.splice(i, 1);
  27.                 }
  28.             }
  29.         }
  30.        
  31.  
  32.         // Push observers
  33.         observers.push({
  34.             callback : _callback,
  35.             type : _type,
  36.             params : [],
  37.             id : _id
  38.         });
  39.  
  40.         // If there is already loaded data it will fire notify immediately
  41.         if (_useLoaded) {
  42.             loadedUsed = false;
  43.            
  44.             angular.forEach(observers, function(observer) {
  45.                 if (observer.type === _type && loadedUsed === false) {
  46.                     _callback(observer.params);
  47.                     loadedUsed = true;
  48.                 }
  49.             });
  50.         }
  51.     }
  52.    
  53.     function notify(_type, _params) {
  54.         angular.forEach(observers, function(observer) {
  55.             if (observer.type === _type) {
  56.                 observer.params = _params;
  57.                 observer.callback(observer.params);
  58.             }
  59.         });
  60.     }
  61.    
  62.     return obj;
  63. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement