angularjs 使用与具有不同数据的模型相同的服务
Posted
技术标签:
【中文标题】angularjs 使用与具有不同数据的模型相同的服务【英文标题】:angularjs use the same service as model with different data 【发布时间】:2014-01-25 10:08:22 【问题描述】:我正在创建一个factory
service
,它为我提供了一些类似的功能
var myApp = angular.module('panelServices', ['ngResource']);
myApp.factory('myService', [...]
function myService()
this.list = [];
myService.prototype.method1: fn() ,
...
myService.prototype.methodn: fn() ,
return myService;
);
我通过 DI 将myService
注入我的controllers
并使用new myService()
实例化myService
的新实例。
我没有找到其他方法来做到这一点,我正在考虑将service
“复制”到例如:anotherService
(基于service
是singletons
的事实)。
我的目标是拥有一个service
用于不同的models
(它们不共享数据,仅共享方法)-
如果我解释得不好,请告诉我,提前谢谢。
【问题讨论】:
在服务中注入模型可能是... 您想要多个服务实例吗? 实际上,是的。我认为是。 服务在模型上运行,它们不应该拥有它。也许你过度思考你的设计。当您调用new
时,您基本上不会使用自动依赖注入。那么,为什么还要为角度服务而烦恼呢?如果要“复制”服务,请在工厂外部定义 myService
,并为每个模型定义一个服务工厂。
@zeroflagL 我可以同意,但如果不在controller
中,不在service
中,我必须在哪里存储我的模型?我认为将其放入服务中,而不是将其放入 scope
中,这给了我更多的分离。我想错了吗? ***.com/questions/11112608/…
【参考方案1】:
对于多个服务实例,您可以使用$injector.instantiate
myApp.factory('myService', function($injector)
function myService()
this.list = [];
myService.prototype.method1: fn() ,
...
myService.prototype.methodn: fn() ,
return function()
return $injector.instantiate(myService);
;
);
然后在控制器中
myApp.controller('myController', function(myService)
var service = new myService();
//other code
);
在另一个控制器中
myApp.controller('anotherController', function(myService)
var service = new myService();
//other code
);
new myService()
它总是给你新的实例。看到这个plunker
【讨论】:
工厂看起来很棒。但是你为什么要向控制器传递一个字符串呢?为什么你在控制器中使用 new ?你能解释一下吗?谢谢 你的工厂返回一个对象。那么new myService()
应该如何工作?除此之外,这正是 OP 现在所做的。
更新了我的答案并添加了演示以上是关于angularjs 使用与具有不同数据的模型相同的服务的主要内容,如果未能解决你的问题,请参考以下文章
带有 AngularJs 的 Ionic 框架:模态是不是可以与启动模态的视图具有相同的控制器?