2016-04-13 28 views
0

我在我的Firebase服務器中提供了一些爲客戶端應用程序提供設置的數據。 我已經實現了一個從服務器獲取這些數據的工廠。

我的問題是關於設計 - 我應該得到這個數據一次,應用程序啓動並附加到rootscope並將其傳遞給所有需要它的控制器,或者將我的工廠注入到使用配置數據的每個控制器中,並在工廠商店本地配置?

// this factory allows getting various global app settings and constants 
.factory('ConfigFactory', ['$firebaseObject', 'FirebaseConfig', 
    function($firebaseObject, FirebaseConfig) { 
     'use strict'; 

     var configs = new Firebase(FirebaseConfig.baseUrl + "/configs"); 
     var _configs = []; 

     return { 
      getConfig: function(configName, user_id){ 
       if(!_configs[configName]){ 
        _configs[configName] = $firebaseObject(configs.child(configName)); 
       } 
       return _configs[configName]; 
      } 
     }; 

    } 
]) 

回答

1

好的做法是使用服務並在需要該信息的位置注入此服務。

請注意,您所定義的不是工廠,而是服務。工廠是用於創建服務的函數,並且您使用factory()而不是service()或provider()來定義此服務的事實是實現細節。

該服務因此被嚴重命名。應該將其命名爲「配置」,而不是「ConfigFactory」。服務通常以小寫字母開頭。

+0

感謝您的信息。我對工廠和服務之間差異的理解充其量是模糊的。 – rex

+0

那麼你的建議方法的工作原理是它將獲取一次數據並將其存儲在內部?我不想讓客戶端去服務器everyime,它想從不同的控制器獲取配置數據。 – rex

+0

在Angular中沒有像工廠這樣的組件類型。有服務,就是這樣。但是服務可以用幾個「配方」來定義:service(),factory(),provider(),value(),constant()。 https://docs.angularjs.org/guide/providers。服務是一個單例,因此如果您將結果存儲在服務中並每次都返回,則使用該服務的所有控制器,過濾器等將使用同一個唯一服務實例,並獲得相同的緩存值。 –

相關問題