如果我多個controller共享一份數據,是在某個比較上層的控制器上保存數據,還是用factory保存這個需要共享的數據,如果用service會怎麼樣。
走同样的路,发现不同的人生
這個問題取決於你用資料的時候,這個資料的商業關聯性在你的 scope 層級到底有多強。
強,就是說你非常確定在某個 scope 用到它的時候,向上找一定可以找到某個父級 scope,那就可以利用 scope 的繼承性來共享。不過建議要用 controller as 的语法给每一个 controller 唯一的命名空间以避免对象重名。实际上你甚至可以把这个数据保存在 $rootScope 来全局共享(但是不推荐,因为 $rootScope 越輕越好),或是有一個最頂層的全域 controller 來保存也可以。
controller as
$rootScope
不強,就是說你無法確定何時何處會用到這個數據,那就用依賴注入咯。純資料的話,建議用 module.value (可变数据)或 module.constant(不可变数据),当然也可以用 module.factory 返回一个对象(这就和 module.value 一样一样的)。module.service 常用於傳回一個建構器,你可以利用它產生不同的物件實例(區別於其他的單例 service)。
module.value
module.constant
module.factory
module.service
其實 module.value/constant/factory/service 全都是 module.provider 的變種(文法糖),好好把官方文件裡關於依賴注入和服務那一章看一遍你就全明白了。
module.value/constant/factory/service
module.provider
用service咯,service一般用來存數據,factory一般是用來調用多個service~或者返回方法,當然功能都是可以互用的,其實感覺是差不多的,至於他們的區別你可以去看這個或這個
其實我對factory和service的差別沒發現有什麼不同,如果你喜歡js的object,那就前者,如果喜歡js的oop,那就service。 。 。有篇譯文是這樣解釋的。
這個問題取決於你用資料的時候,這個資料的商業關聯性在你的 scope 層級到底有多強。
強,就是說你非常確定在某個 scope 用到它的時候,向上找一定可以找到某個父級 scope,那就可以利用 scope 的繼承性來共享。不過建議要用
controller as
的语法给每一个 controller 唯一的命名空间以避免对象重名。实际上你甚至可以把这个数据保存在$rootScope
来全局共享(但是不推荐,因为$rootScope
越輕越好),或是有一個最頂層的全域 controller 來保存也可以。不強,就是說你無法確定何時何處會用到這個數據,那就用依賴注入咯。純資料的話,建議用
module.value
(可变数据)或module.constant
(不可变数据),当然也可以用module.factory
返回一个对象(这就和module.value
一样一样的)。module.service
常用於傳回一個建構器,你可以利用它產生不同的物件實例(區別於其他的單例 service)。其實
module.value/constant/factory/service
全都是module.provider
的變種(文法糖),好好把官方文件裡關於依賴注入和服務那一章看一遍你就全明白了。用service咯,service一般用來存數據,factory一般是用來調用多個service~或者返回方法,當然功能都是可以互用的,其實感覺是差不多的,至於他們的區別你可以去看這個或這個
其實我對factory和service的差別沒發現有什麼不同,如果你喜歡js的object,那就前者,如果喜歡js的oop,那就service。 。 。有篇譯文是這樣解釋的。