84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
如果我多个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。。。有篇译文是这样解释的。