天天看點

AngularJS服務總結value(name, object)constant(name, value)service(name, constructor)factory(name, providerFunction)provider(name, provider)

在之前介紹angularjs的部落格中,簡單的介紹了angularjs提供的常用服務,以及如何自定義服務,具體可參見《angularjs 服務(service)》。在這一篇部落格中,我将為大家詳細介紹如何自定義服務,以及各種方式之間的差別。

<code>value(name, object)</code>方法允許我們直接将一個普通值或對象作為服務。我們通過一段代碼來看看如何使用:

在這段代碼中,我們是用<code>value</code>方法定義了一個服務,服務名稱為<code>hqvalue</code>,值為:10,這是一個很簡單的例子。

<code>constant(name, value)</code>也可以注冊一個服務,值可以是一個字元串、數字、數組、對象或函數,和<code>value(name, object)</code>很像有木有。對上面的示例進行簡單的修改:

細心的小夥伴應該可以發現<code>constant(name, value)</code>和<code>value(name, object)</code>的用法雖然很想,但是二者也是有差別的,不然也就沒必要搞兩個出來了,二者最大的差別在于使用<code>constant(name, value)</code>注冊的服務可以在<code>config(configfn)</code>方法中注入,而<code>value(name, object)</code>不可以。通常用<code>value(name, object)</code>來注冊服務對象或者函數,而用<code>constant(name, value)</code>來配置資料。

使用<code>service(name, constructor)</code>注冊服務,服務對象是使用<code>new</code>進行執行個體化的,是以我們應該給<code>this</code>添加屬性。

在這段代碼中,我們使用了<code>service(name, constructor)</code>注冊了一個服務,服務名為<code>hqstring</code>,我們為該服務添加了一個<code>touppercase</code>用于将字元串轉換為大寫。

使用<code>factory(name, providerfunction)</code>注冊服務其實就是建立一個對象作為<code>providerfunction</code>的傳回值,注入到<code>controller</code>中的其實就是建立的對象。我們使用<code>factory(name, providerfunction)</code>來實作<code>service(name, constructor)</code>同樣的功能,代碼如下:

<code>provider(name, provider)</code>是可以傳入<code>config(configfn)</code>的服務,如果我們想要在 service對象啟用之前,先進行子產品範圍的配置,那就應該用 provider。使用<code>provider(name, provider)</code>注冊服務,我們需要為<code>this</code>添加<code>$get</code>函數,函數傳回用于注入到<code>controller</code>中對象,我們也可以為<code>this</code>添加其他屬性以便于我們在<code>config(configfn)</code>方法中使用。需要注意的是,如果我們的服務名稱為:<code>hqstring</code>,那麼我們在<code>config(configfn)</code>方法中注入的名稱應該為:<code>hqstringprovider</code>。下面我們通過代碼來看一下如何使用:

繼續閱讀