我正在使用提供商尝试使用我自己的一套#34;州"保存。我有一个提供商在其自己的模块中设置并注入2个独立的子模块"我想用它的应用程序。他们每个人都有一个配置设置,他们发送一些我想要保留的信息。我现在遇到的问题是它似乎没有像我想的那样持有信息。我基本上想要在提供者中创建一个大对象,每个模块都会贡献自己的配置。让我说明我的意思。
提供商看起来像这样 -
angular.
module('urlTesting.testProvider', [])
.provider("freshUrl", function(){
//our state object
var currentState = {};
return {
stateName : function(name){
//test function
this.state_name = name;
},
addState : function(modName, item, variables){
var newState = { "module" : modName, "customUrl" : [{ "name" : item, "options" : variables}]};
_.extend(currentState, newState);
console.log(currentState, modName);
},
$get: function(){
return {
state: currentState
};
}
}
});
不同模块中的配置如下所示:
.config(function(freshUrlProvider){
//module name, state name, provided state variables
freshUrlProvider.addState("module1", "mod1", ["true", "false"]);
});
所以我有2个模块,都这样做,唯一的区别是模块2中的项目是名称module2和mod2。
所以我在每个模块中点击函数控制器来调用提供者和currentState(参见$ get)
所以他们只是做了一个:
console.log(freshUrl.state);
现在,我遇到问题的是 - 在模块1中,当我点击它时,我只返回模块2的对象({" module":" module2 ... ect) ,当我在模块2中单击它时,我回到未定义。
我的想法是_.extend将所有这些对象组合成currentState,但它似乎并没有按照我的想法工作。可以使用一些帮助,因为我似乎碰壁了。谢谢你的阅读!
基本思想是(像路由一样)模块会单独设置它们的配置,所以我可以预先使用它们 - 所以我希望所有发送的配置对象组合成一个大的currentState对象,因此_.extend。
编辑:也许这是模块化工厂的工作,而不是提供商?我只是觉得让每个模块在配置中设置其自定义参数会很好 - 但是我无法在所有模块中创建和使用一个大对象。
Edit2:我发现这篇文章(http://garabagne.io/2014/06/08/the-life-and-times-of-the-angular-provider/)对提供商来说非常好读,但是我仍然不确定这是否应该解决这个问题。
我认为我已经深入研究了这个问题 - 您是否可以跨多个模块(以模块方式)使用相同的提供程序来拥有一个可以跟踪所有配置变量的地方。似乎答案是否定的,因为他们被认为是单身人士。