2015-10-17 92 views
0

要共享controllers之間的數據,大多數Stack overflow Answers建議使用services。大多數情況下,當我共享controllers之間的數據時,它是我的應用程序模型(數據),並根據應用程序邏輯在每個controller中進行更改。那麼,它應該不是angular value而不是angular service控制器之間共享數據:服務還是值?

例如,採取以下service

app.factory('Employee',function($http){ 
     function Employee(){ 
      this.data = {}; 
     } 
     Employee.prototype.load = function(){ 
      //XHR call which invokes employee details and assigns it here 
      $http.get(url).then(
        function(response){ 
         this.data = response.data; 
        } 
     ); 
     } 

     return new Employee(); 
}); 

有了這些服務,我將無法在ui-router年代到injectEmployee模型resolve(如services不能注入config塊) 。但如果我使用value創建相同,我將能夠在stateRouting本身期間注入它。請問你爲什麼value不是首選創建controllersservice之間的模型/共享數據?

回答

2

首先,值也不能注入到配置塊中。但這是無關緊要的,因爲在配置階段不會調用解析函數,但是在運行時,每次導航到封閉路線時都是如此。

值根本無法注入,所以我不確定在定義值時如何訪問$ http。

最後,你可以訪問您在下決心功能服務,只需將其注入功能:

resolve: { 
    employee: function(Employee) { 
     return Employee.load(); 
    } 
} 

但是,這將沒有多大意義,因爲你的load()方法不回報什麼。它應該做的是返回員工的承諾:

Employee.prototype.load = function(){ 
    return $http.get(url).then(
     function(response) { 
      return response.data; 
     } 
    ); 
}; 

但是,無關與控制器之間的數據共享。它允許在等待員工數據可用並將其注入控制器之前切換到員工視圖。

+0

謝謝。在我的系統中使用角度服務和不正確演示的部分知識,我提出了一個問題! – DRB

相關問題