2015-01-06 2 views
0

В моем app.run Я вызываю MenuSvc для заполнения $ state, а затем я вызываю LayoutCtrl, чтобы заполнить навигацию DOM, предположительно с кешем, и избежать другого вызова сервера ,

1. $ Http:

/* @ngInject */ 
app.factory('MenuSvc', MenuSvc); 
function MenuSvc($http, MenuSvcCache){ 
    return { 
     all: function(){ 
      return $http({ 
       method: 'GET', 
       url: 'api/menu.json', 
       cache: MenuSvcCache 
      }); 
     } 
    } 
}; 
MenuSvc.$inject = ['$http', 'MenuSvcCache']; 

2. $ CacheFactory:

/* @ngInject */ 
app.factory('MenuSvcCache', MenuSvcCache); 
function MenuSvcCache($cacheFactory){ 
    return $cacheFactory('MenuSvc') 
}; 
MenuSvcCache.$inject = ['$cacheFactory']; 

3. LayoutCtrl:

ng.module('app.Layout').controller('LayoutCtrl', LayoutCtrl); 
function LayoutCtrl($cacheFactory, $http, MenuSvc, MenuSvcCache) { 
    var layout = this; 
    layout.pageTitle = 'LayoutCtrl'; 

    Init(); 
    function Init(){ 
     if (MenuSvcCache) { 
      layout.menuItems = MenuSvcCache.get(); 
      console.log(MenuSvcCache); 
     } else { 
      MenuSvc.all().success(function (data) { 
       layout.menuItems = data; 
       console.log(MenuSvcCache); 
      }) 
       .error(function (error) { 
        console.log('Error: ' + error.message) 
       }); 
     } 
    } 
}; 

LayoutCtrl.$inject = ['$cacheFactory', '$http', 'MenuSvc', 'MenuSvcCache']; 

Излишне говорить, что он не работает. Кто-нибудь видит мою ошибку?

ответ

0

я решил сделать положенную звонок от app.run и работает там (MenuSvcCache выше остается неизменным):

1. app.run

app.run(function ($q, $rootScope, $state, $window, MenuSvc, MenuSvcCache) { 
    MenuSvc.all().success(function (states) { 
     MenuSvcCache.put('MenuSvc', states) 
    .......... 

2. MenuSvc

same as above but removed the 'cache: true' 

3. LayoutCtrl

 function Init(){ 
     if (MenuSvcCache) { 
      layout.menuItems = MenuSvcCache.get('MenuSvc'); 
      console.log(MenuSvcCache); 
     } else { 
      MenuSvc.all().success(function (data) { 
       layout.menuItems = data; 
       MenuSvcCache.put('MenuSvc', data) 
       console.log(MenuSvcCache); 
      }) 
       .error(function (error) { 
        console.log('Error: ' + error.message) 
       }); 
     } 
    } 
}; 

Добавлен бонус, если вы хотите использовать кнопку обновления:

 layout.clearCache = function() { 
     if (MenuSvcCache) { 
      MenuSvcCache.removeAll(); 
     } 
    } 
Смежные вопросы