angularjs使用相同的服务作为模型,但使用不同的数据。

11 浏览
0 Comments

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然后,我通过DImyService注入到我的controllers中,并使用new myService()来实例化一个新的myService实例。\n我没有找到另一种方法来做到这一点,我在考虑将service“复制”到例如:anotherService中(基于servicesingletons的事实)。\n我的目标是拥有一个service可用于不同的models(它们不共享数据,只共享方法)-\n如果我没有解释清楚,请告诉我,谢谢。

0
0 Comments

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中使用相同的服务作为模型,但是使用不同的数据,从而实现更灵活的应用程序开发。

0