Advertisement
Guest User

angularjs, service, load only once

a guest
Oct 31st, 2014
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.             var events = {
  2.                 load: {
  3.                     isPending: false,
  4.                     error: false,
  5.                     loaded: false
  6.                 }
  7.             };
  8.  
  9.             this.load = function(force) {
  10.                 force = force || false;
  11.  
  12.                 var dfd = $q.defer();
  13.  
  14.                 var watchId = $rootScope.$watch(function() {
  15.                     return events.load.isPending;
  16.                 },function(newVal, oldVal) {
  17.                     if(newVal !== oldVal) {
  18.                         if(events.load.loaded) {
  19.                             dfd.resolve(someModel);
  20.                         } else if(events.load.error) {
  21.                             dfd.reject(events.load.error);
  22.                         }
  23.                         if(events.load.loaded || events.load.error) {
  24.                             watchId();
  25.                         }
  26.                     }
  27.                 });
  28.  
  29.                 if(events.load.loaded && !force) {
  30.                     events.load.isPending = false;
  31.                 } else if(!events.load.isPending || (events.load.loaded && force)) {
  32.                     events.load.isPending = true;
  33.                     someResource.load(function (data) {
  34.                         someModel = data;
  35.                         events.load.loaded = true;
  36.                     }, function (why) {
  37.                         events.load.error = why;
  38.                     }).$promise.finally(function () {
  39.                         events.load.isPending = false;
  40.                     });
  41.                 }
  42.  
  43.                 return dfd.promise;
  44.             };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement