如何使用 angularjs 个提供商创建不同版本的服务
how to create different versions of a service using angularjs providers
我有一个名为 itemService 的函数.. 从 shoppingList 控制器获取项目并将其推入项目数组,然后 return 返回此数组。
现在我需要创建 2 个购物列表,所以使用 .factory 我设法让两个控制器获得不同版本的服务,当我通过第一个控制器推送一个项目时,第二个控制器的数组将不会获得这个项目他们被溅
现在我如何使用 .provider
做同样的事情
function itemService (limit){
let share = this;
share.items=[];
share.additem=function(N,Q){
if(limit===undefined || limit>=share.items.length+1){
let item={N,Q};
share.items.push(item);
}
else {
throw new Error("limit reached !")
}
}
share.getItems=function(){
return share.items;
}
}
function itemServiceFactory(){
let factory = function(limit){
return new itemService (limit);
};
return factory;
}
工厂、提供者、服务,甚至值和常量都是同一事物的版本。您可以将更通用的提供程序分解为所有这些提供程序。像这样:1
From version #1 of question:
ERRONEOUS
function itemServiceProvider(){
let provider=this;
provider.defaults={limit:10};
// now i need to make 2 separated version of the service
provider.$get = function(){
return new itemService (provider.defaults.limit);
};
}
要将您的工厂转换为供应商:
app.provider("MyProvider", function() {
let provider=this;
provider.defaults={limit:10};
provider.$get = function() {
return function(){
return new itemService (provider.defaults.limit);
};
};
return provider;
});
用法:
app.controller("cntl", function(MyProvider) {
var service1 = MyProvider();
var service2 = MyProvider();
})
提供者、工厂和服务是单例。 $get 函数在应用程序的生命周期中只会被调用一次。 provider.$get
函数需要 returns 一个构建新服务的 函数。
有关详细信息,请参阅
- AngularJS: Service vs provider vs factory
- this answer
我有一个名为 itemService 的函数.. 从 shoppingList 控制器获取项目并将其推入项目数组,然后 return 返回此数组。
现在我需要创建 2 个购物列表,所以使用 .factory 我设法让两个控制器获得不同版本的服务,当我通过第一个控制器推送一个项目时,第二个控制器的数组将不会获得这个项目他们被溅 现在我如何使用 .provider
做同样的事情function itemService (limit){
let share = this;
share.items=[];
share.additem=function(N,Q){
if(limit===undefined || limit>=share.items.length+1){
let item={N,Q};
share.items.push(item);
}
else {
throw new Error("limit reached !")
}
}
share.getItems=function(){
return share.items;
}
}
function itemServiceFactory(){
let factory = function(limit){
return new itemService (limit);
};
return factory;
}
工厂、提供者、服务,甚至值和常量都是同一事物的版本。您可以将更通用的提供程序分解为所有这些提供程序。像这样:1
From version #1 of question:
ERRONEOUS
function itemServiceProvider(){ let provider=this; provider.defaults={limit:10}; // now i need to make 2 separated version of the service provider.$get = function(){ return new itemService (provider.defaults.limit); }; }
要将您的工厂转换为供应商:
app.provider("MyProvider", function() {
let provider=this;
provider.defaults={limit:10};
provider.$get = function() {
return function(){
return new itemService (provider.defaults.limit);
};
};
return provider;
});
用法:
app.controller("cntl", function(MyProvider) {
var service1 = MyProvider();
var service2 = MyProvider();
})
提供者、工厂和服务是单例。 $get 函数在应用程序的生命周期中只会被调用一次。 provider.$get
函数需要 returns 一个构建新服务的 函数。
有关详细信息,请参阅
- AngularJS: Service vs provider vs factory
- this answer