創建服務
Angular提供了幾種有用的服務,對於所有的應用來說,你將會發現這些服務對於創建你自己的服務是有用處的。為了創建自己的服務,你應該從通過一個模塊(module)注冊一個服務工廠方法開始(可以使用Module#factory api或者直接使用模塊配置方法中的$provide api)。
所有的Angular服務通過使用在一個命名(id)下的Angular DI(依賴注入)系統來注冊它們自己以參與到依賴注入中,就像聲明的依賴需要提供給注冊服務的工廠方法一樣。
注冊服務
為了注冊一個服務,你必須有一個模塊(你要注冊的服務將會是這個模塊的一部分)。換句話說,你可以注冊帶有通過Module Api或在模塊配置方法中使用$provide服務的模塊的服務。例如:
注意:你不是在注冊一個服務實例,而是工廠方法將會在創建服務實例的時候被調用。
依賴
服務不僅僅可以被依賴,還可以有它們自己的依賴。這些依賴能夠被作為工廠方法的參數指定。(閱讀更多)
接下來是一個非常簡單的例子。這個服務依賴$window服務並且僅僅是一個方法。這個服務簡單的存儲所有的通知;在第三個后,服務展示window警告的所有通知。
參考:
實例化Angular服務
在Angular中所有的服務使用消極的實例化方式。這意味着一個服務僅當它被需要實例化一個服務或被一個應用組件依賴的時候被創建。另一方面,除非服務被應用直接或間接注冊,Angular將不會實例化服務。
單例模式的服務
最后,意識到所有的Angular服務是應用程序內唯一是重要的。這意味着,在每一個注射器中僅僅有一個被給予的服務的實例。由於Angular是“極度討厭”全局狀態的,創建多個注射器是可能的,每一個注射器有它自己的服務實例,但是這是非常稀少的。