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;
);

我通过 DImyService 注入我的controllers 并使用new myService() 实例化myService 的新实例。

我没有找到其他方法来做到这一点,我正在考虑将service“复制”到例如:anotherService(基于servicesingletons 的事实)。 我的目标是拥有一个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 具有相同模板的多个路由不应重新渲染

带有 AngularJs 的 Ionic 框架:模态是不是可以与启动模态的视图具有相同的控制器?

如何在 AngularJS 中为 ngInclude 指令指定模型?

相同 Keras 模型和数据的准确度低于 AUC [关闭]

Angularjs中不同类型的双向数据绑定

在 flask-sqlalchemy 中使用具有相同模型的多个数据库