angularjs使用相同的服务作为模型,但使用不同的数据。
angularjs使用相同的服务作为模型,但使用不同的数据。
我正在创建一个factory
service
,它为我提供了一些函数,例如:\n
var myApp = angular.module('panelServices', ['ngResource']); myApp.factory('myService', [...]{ function myService(){ this.list = []; } myService.prototype.method1: fn() {} , ... myService.prototype.methodn: fn() {}, return myService; });
\n然后,我通过DI将myService
注入到我的controllers
中,并使用new myService()
来实例化一个新的myService
实例。\n我没有找到另一种方法来做到这一点,我在考虑将service
“复制”到例如:anotherService
中(基于service
是singletons
的事实)。\n我的目标是拥有一个service
可用于不同的models
(它们不共享数据,只共享方法)-\n如果我没有解释清楚,请告诉我,谢谢。
AngularJS中,有时候我们需要使用相同的服务(service)作为模型(model),但是要使用不同的数据。这种情况下,我们可以使用$injector.instantiate方法来创建多个服务实例。
首先,在工厂函数中创建服务对象。在这个例子中,我们创建了一个叫做myService的服务,它包含一个列表属性和一些方法。然后,我们返回一个匿名函数,该函数调用$injector.instantiate方法来实例化myService服务,并返回实例化后的对象。
在控制器中,我们可以通过依赖注入的方式来使用myService服务。通过调用new myService()来创建一个新的服务实例,并将其赋值给一个变量。这样,我们就可以在控制器中使用这个新的服务实例了。
在另一个控制器中,我们可以通过同样的方式来使用myService服务,创建另一个新的服务实例。
通过使用$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 });
通过使用这种方法,我们可以在AngularJS中使用相同的服务作为模型,但是使用不同的数据,从而实现更灵活的应用程序开发。