2015-04-21 56 views
0

編輯角JS服務架構

短的版本: 說我有應用程序數據是許多不同的服務。如何避免需要將所有這些服務注入到顯示應用程序狀態的每個控制器中?

編輯

我正在構建我的第一個Angular應用程序。基本設計是我有一個主頁,顯示大約5個不同變量的值(每個變量都很複雜)。在此頁面上,該應用程序正在收集和分析來自藍牙的數據。偶爾,這5個變量和一些藍牙數據被保存到REST後端,並保存到設備中。這5個變量中的每一個都有頁面來改變它們的值。

我已盡力遵循最佳做法。我有非常薄的控制器。我使用所有數據的服務。我真的只使用$ scope在視圖和控制器之間綁定數據。

現在我的問題是,我開始使用全局「狀態」服務來跟蹤這5個變量。我注入任何需要顯示狀態的控制器,並將html綁定到它。任何時候我想改變任何狀態時,我都會調用該狀態服務的方法來執行此操作。這很奏效,但現在國家的服務正在變得越來越龐大。

我試圖將功能分解爲其他服務,但我遇到了需要從State服務讀取數據,然後回寫到State服務的其他屬性的問題。如果我將其他服務注入國家,我也不能將國家注入其他服務。

我曾想過如何擁有許多較小的服務,但是當我將數據保存到服務器時,我一直在回來。當我這樣做時,我需要從應用程序的每個角落收集數據以發送。如果所有這些信息都存儲在不同的服務中,我只需再次將所有這些信息注入單個服務。

當我寫這篇文章的時候,我很確定我錯過了在應用程序中使用$ scope的一個大概念。

任何指針將不勝感激,

感謝,

斯科特

+0

你可以列出狀態和子狀態服務之間你的依賴? – Trevor

+0

我建議在1或2句話中清楚地說明你的問題。如果你正在尋找最佳實踐,這可能不是問的地方。 – ShadowCat7

回答

0

難道你把東西放進子服務,然後使國家服務,爲這些子服務聚合器,然後代替將狀態注入到子服務中,是否注入了所需的特定子服務?例如: -

var app = angular.module('services', []); 

app.service('sub1', function(){ 

    return { 
     // ... 
    } 
}); 

app.service('sub2', function(sub1){ 

    var data = sub1.getData(); 
    data.prop = 'new_value'; 
    sub1.setData(data); 

    return { 
     // ... 
    } 
}); 

app.service('State', function(sub1, sub2){ 

    var data = sub1.getData(); 
    data.prop = 'new_value'; 
    sub1.setData(data); 

    var data = sub2.getData(); 
    data.prop = 'new_value'; 
    sub2.setData(data); 

    return { 
     // ... 
    } 
}); 
+0

有了這樣的設計,我會注入狀態到我的所有控制器中,以便能夠綁定到所有數據? –

+0

是的。它將包含所有必要的調用來訪問來自子服務的數據。 – Trevor