組件可以要求某個服務可用並且它也可以接受輸入。何時需要服務,何時需要投入?提供服務vs將輸入傳遞給組件
回答
服務通常很適合爲組件樹提供一樣的東西。例如,對於應用程序中的所有組件,Http服務通常都是相同的。想象一下,如果沒有服務這樣的事情。你必須重複使用相同的代碼片段,或者通過實現所使用的任何地方。應用程序中的每個組件都必須將HttpService作爲輸入傳遞給子組件。
輸入通常對另一件事物提供一件事情很好。例如,將完成%傳遞給進度條是父級和子級之間的緊密交互。想象一下,如果沒有投入這樣的事情。每次你想傳遞任何信息時,你都必須創建一個服務,甚至只需設置一個文本框的值即可。
注意事項:
如果您的組件的父母或用戶注意,就是BEING傳入的數據或功能的,或者是你的程序或組件樹的一部分區區方面?例如,OrderComponent
可能取決於OrderService
。 OrderComponent
的父組件不應該知道OrderService
(它不知道應該使用哪個OrderService,或者OrderService將使用哪個HttpService實現等),因此將它保留爲服務是有意義的。對於進度條,當然直接父母知道完成百分比。如果它不知道,爲什麼它甚至在那裏放進度條?
數據或功能是否直接與組件的用途相關?例如,HttpService的具體實現是任何OrderComponent
的次要關注點,其主要工作是顯示訂單(但它是這樣做的),而完成百分比是進度條的主要關注點。
您的數據在運行時是否更改?更改輸入會觸發更改檢測,但服務中更改的原始值不會。服務通常具有不變的功能。如果服務中有數據並需要在組件中使用數據,則可以將BehaviorSubject
或其他Observable
用於該服務,並使用async
管道將其值顯示在組件模板中。
您可能想讓組件期望服務,但是擔心同一父組件中的該組件的兩個實例將不得不共享相同的提供的服務實例。您可以通過在兩者之間創建另一個提供服務的組件來避免父組件向其所有子組件提供相同的服務。
更多組件交互這裏: https://angular.io/docs/ts/latest/cookbook/component-communication.html
這是一個很好的問題。我認爲答案的關鍵在於您是否想要一個與服務耦合的組件,或者您是否想要一個更易於配置且獨立運行的組件。
有兩種用例。例如,組件可能依靠服務來獲取其數據。關於這一點的好處是,從調用組件中配置的次數更少(您不必傳入數據 - 它只是可以直接使用)。另一方面,當您想要傳遞數據時,它使組件更少可插入。
沒有服務依賴性的組件獲取數據)可能更適用於各種其他環境。例如,不是依賴服務來獲取其數據,而是可以通過它的@Input屬性從父組件傳入數據。
- 1. 將對象屬性傳遞給組件服務,還是不傳遞給服務?
- 2. AngularJS $ http提供程序未將Cookie傳遞給.NET Web服務
- 3. 將JSX傳遞給組件vs dangerouslySetInnerHTML
- 4. 將數組傳遞給WCF服務
- 5. 將表單vs原始輸入傳遞到服務層
- 6. 將param傳遞給服務
- 7. 將BufferedReader傳遞給服務
- 8. 將輸入傳遞給optaplanner
- 9. 組件提供服務
- 10. 將參數傳遞給testNG提供者
- 11. 將大文件傳遞給WCF服務
- 12. 通過Shiny服務器將閃亮輸入傳遞給R markdown
- 13. Reactjs創建一個提供程序組件,將Redux傳遞給子組件
- 14. 將業務層傳遞給WCF服務
- 15. 將值傳遞給組件
- 16. 將Meteor.user()傳遞給組件?
- 17. 將新的服務器數據傳遞給react.js組件
- 18. 如何將服務響應傳遞給組件?
- 19. 將初始值傳遞給自定義輸入組件
- 20. 通過輸入將組件傳遞給指令
- 21. 如何將Angular 2表單輸入傳遞給typscript組件?
- 22. 將表單輸入傳遞給React組件時出錯
- 23. 將數據從父組件傳遞到要添加到子組件提供程序數組的服務
- 24. 如何將JavaScript數組的數組傳遞給Web服務?
- 25. 將參數傳遞給python服務
- 26. 將Json傳遞給Web服務
- 27. Android:將數據傳遞給服務
- 28. Ninject.MVC3,將DependencyResolver傳遞給服務層?
- 29. Contactform7將服務器值傳遞給javascript
- 30. 將參數傳遞給SOAP服務