2015-10-06 59 views
2

我有一個多次調用的角度服務功能。 在index.html頁,我有以下行:多次調用角度服務功能

<li><i class="pull-right"></i><br/>{{appCtrl.service.getCurrentUser()}}&nbsp;</li> 

在應用程序控制器我設置變量

appCtrl.controller('AppController', function ($state, securityService, $log) { 

     $log.info('App controller'); 

     var appCtrl = this; 
     appCtrl.service = securityService; 
}); 

在我的服務我暴露功能

login.factory('securityService', function ($window, $log) { 

    var currentUser; 

    return { 
     setCurrentUser: function (user) { 
      currentUser = user; 
      $window.sessionStorage.setItem('User', JSON.stringify(currentUser)); 
     }, 
     getCurrentUser: function() { 
      $log.info('Calling current user'); 
      if (!currentUser) { 
       var storedObject = $window.sessionStorage.getItem('User'); 
       currentUser = JSON.parse(storedObject); 
      } 
      return currentUser; 
     } 
    } 
}); 

下面一行在應用程序啓動或頁面刷新完成時,getCurrentUser函數被多次調用。

$log.info('Calling current user'); 

控制器是被稱爲只有一次,我通過看$log.info('App controller');

監視它也被稱爲髒檢查過程的一部分,還是我做錯了什麼?

回答

0

試試這個,這是正確的工廠聲明。因爲AngularJS在內部調用你的工廠,如:securityService(injects);,每次注入(使用)你的工廠。

login.factory('securityService', function ($window, $log) { 
     var currentUser; 
     return { 

      setCurrentUser: function (user) { 
       currentUser = user; 
       $window.sessionStorage.setItem('User', JSON.stringify(currentUser)); 
      }, 
      getCurrentUser: function() { 
       $log.info('Calling current user'); 
       if (!currentUser) { 
        var storedObject = $window.sessionStorage.getItem('User'); 
        currentUser = JSON.parse(storedObject); 
       } 
       return currentUser; 
      } 
     }; 

}); 
5

角呼叫您的每功能消化週期,可以設置在函數內部斷點,並檢查它。如果你在1.3版本,那麼請看看One Time Binding的功能。如果沒有,那麼調用控制器和綁定視圖內的服務在一定範圍變量:

$scope.currentUser = securityService.getCurrentUser(); 

,並查看綁定到範圍變量中:

{{currentUser}} 
+0

嗨,與功能設置爲可變問題應用程序控制器是應用程序控制器通過應用程序啓動將該變量設置爲初始值(未定義)。當工廠的setCurrentUser被登錄控制器調用時,應用程序控制器中的變量不會被更新。 – Rentius2407

+1

然後我會使用一些標準的事件機制(所有這$廣播/ $發射/ $的東西)更新其他控制器時,用戶值更新登錄控制器。 – udalmik

+0

謝謝udalmik,我已經參加了$廣播和$對策略。它適用於我的場景。 – Rentius2407