2016-07-27 84 views
2

我一直在使用角度2約2周現在,我喜歡它,除了一件事...服務。儘管使用它們,以符合社會,我不明白這一點,我希望有人能夠解釋推理。Angular 2 Service ...毫無意義?

除加載數據外,服務不執行任何操作。更不用說9/10我注入的組件必須具有類似的功能來處理返回的數據並使其可用。我遇到的另一個大問題是開銷。讓我們說(繼英雄教程)我運行一個ajax請求(使用服務)來創建一個英雄列表,我點擊一個,現在我加載一個新的頁面,我收到的ID和運行另一個請求使用相同的服務。

因此我不明白。爲什麼不創建它更像一個實例,其中數據只需要加載一次,並且可以被查詢而不是提出全新的請求。更不用說返回實際數據而不是承諾/可觀察。如果有人能解釋這一點,並告訴我我錯過了什麼,我會喜歡這一點。提前致謝。

回答

4

服務封裝了業務關注點,並將它們與UI關注點或控制器關注點分開,這兩個關注點都控制着它們。

服務側重於功能。 UI側重於演示。 控制器專注於管理UI和服務交互。

好處是可維護性。 UI邏輯和業務邏輯的分離旨在減少UI層和Model層之間的耦合,從而導致設計更簡潔,易於開發,測試和維護。

在Angular2:

class --> Controller 
injectable services --> Model 
component view template --> View 
+0

好吧,我想我明白了。我認爲後面的代碼(ex herodetails.component.ts)和html是視圖,它處理數據綁定和事件處理程序。但是,如果我正確理解你,後面的代碼是控制層? 我不應該在組件和服務之間創建實例嗎?這樣我不必一直拉下相同的數據。另外,如果這是做它的正確方法,它從來沒有被展示或談論過? (至少從我的搜索和我遵循的一些教程) – ZaksBack

+0

還有其他模式,你可以遵循,以確保數據被拉下一次。即作爲緩存數據的單例服務,或者使用向用戶重放數據的可觀察事物。 Angular2談到一個組件模型,但它是,imho,MVC。 – pixelbits

+0

認爲這是相關的:http://stackoverflow.com/questions/35762515/is-angular2-mvc – pixelbits

1

有一種情況,即服務是必不可少的;當您想要在比父 - 子更深的樹中的組件之間來回傳遞數據時。

例如,一個聯繫人應用程序。您可能有一個頁面組件(一個級別),其中每個聯繫人顯示在一個組件(三個級別)中,以及地址(四個級別),電話和電子郵件(第四級別)的呈現再次)由組件處理。你可能有另一個分支脫離根目錄來編輯與它自己的多級樹的聯繫。與其試圖構造複雜而脆弱的組件間通信,一項服務簡化了所有組件的數據獲取和保存。

服務可以提供設置和讀取應用程序狀態的方法。有幾種不同的模式,使用ngrx/store或基於觀察的狀態系統。這很可能無法使用組件。

示例應用程序可能有些過分,但是想象一下使用http調用加載列表的模式,然後選擇加載描述事務的複雜數據結構的項目。您對選擇的項目只有一些關係。

在我短暫的經歷中,事情會非常迅速地變得非常多毛和複雜,而所有這些似乎不必要的事情都是對一個非常棘手問題的答案。