因此,我有一个已创建的模块,可以为我执行一种“状态”路由。我制作了自己的小版本,以获得确切的预期效果,在将其插入单独的模块进行测试之前,它似乎工作得很好。
我将其注入2个单独的模块中,在需要使用的每个模块的.config中定义信息,然后在控制器中调用它以使用我的更改状态效果。
直到我将其插入单独的模块之前,它一直运行得很好,现在看来正在发生的事情是我为处理所有这些而创建的模块正在为每个模块创建单独的实例。让我告诉你我的意思:
这是使用它进行测试的模块之一的示例-
angular.
module('urlTesting2', [ 'urlTesting'])
.config(function($moduleObjectProvider) {
var callback = function(name, obj) {
console.log(name, obj);
}
$moduleObjectProvider.$get().set("module2", callback)
.addState("calender", ["day", "week", "month"]);
}).controller("testControl2", function($scope, checkUrl) {
$scope.addSecond = function() {
checkUrl.goState("module2", "calender", ["yes", "no", "maybe"]);
}
});
因此它被注入,并且在配置中,我调用提供程序并设置一个带有状态的新模块。在控制器中,我只调用goState。仅靠它本身就可以很好地工作。问题是当我在执行相同操作时添加单独的模块时。我在这里摆弄一个小提琴来显示问题-
https://jsfiddle.net/7hn3ovgz/1/
所以-我想在自己的浏览器窗口中对此进行测试,但是拨弄似乎是共享此内容的最简单方法。它不会更改浏览器中的实际URL,但仍会记录所有效果。
基本上,我认为正在发生的事情是,当我单击以更改模块中的状态时,它会触发两次并在另一个模块中查找状态(该状态不存在)。我想要的效果是,所有设置配置的模块都将放在一个地方。因此,当您执行.set时,它只是将对象添加到提供程序中名为currentModules的变量中。似乎配置器正在为此设置单独的实例(如闭包),而不是将所有config set()推入一个大对象中以供参考。
如果尚不清楚,我们深表歉意,希望小提琴能够足够清楚地显示出来,并感谢您抽出宝贵的时间阅读。
似乎问题出在提供者的注入器上,每次调用它都会创建该函数的新实例,因此您要做的就是切换
function $moduleObjectProvider() {
var currentModules = {};
到
var currentModules = {};
function $moduleObjectProvider() {
或将提供者重组为可能的注入功能
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句