AngularJS - 如何路由到不同模块中的控制器

时间:2013-10-28 17:13:02

标签: angularjs

我有一个与angularjs中的模块和路由有关的问题。要求是在一个模块中定义所有路由配置 - 让我们调用此ModuleRtr

触发路由后,应调用控制器(例如,名为TestCtr)。该控制器在另一个模块中定义 - 让我们称之为ModuleCtrl

如果我尝试这样做,我会得到一个例外:

  

“参数TestCtr不是函数,未定义”

。原因是当角广播$routeChangeSuccess事件时,侦听器尝试访问控制器(TestCtr)作为当前模块的一部分 - ModuleRtr。因为它不存在,所以会引发错误。

如果我只是在TestCtr中创建ModuleRtr控制器(与其中包含路由的控制器相同),那么一切正常。但是我不希望这样,我希望将TestCtr放在不同的模块中。我也不想在ModuleCtrl模块中定义路由。

所以,以更简单的方式,我的问题是:是否有可能在一个模块(ModuleRtr)中定义的路由调用另一个模块(ModuleCtrl)中定义的控制器?

我忘了提到的东西......我不想以任何方式绑定这两个模块。当然,这包括在模块创建期间列出依赖项。我已经尝试动态加载TestCtr - 它没有解决问题。

场景是:您有2个angularjs应用程序(模块)。他们对彼此一无所知......除了一件事 - 在共享/公共位置的某个地方,有一个跟随特定结构的对象(如合同)。第一个模块在那里写入数据。然后它从第二个模块运行一个共同的功能(这实际上是我问的问题 - 如何?)。然后第二个模块知道要去哪里(这是合同)要阅读什么以及做什么。我可以这样做的一种方法是在创建另一个模块时尝试动态生成表示模块依赖关系的字符串。我不确定这是否是一个很好的解决方案...

非常感谢!

1 个答案:

答案 0 :(得分:1)

您可以为每个功能使用带有子模块的单个模块,例如:

angular.module('myApp.home',[]);
angular.module('myApp.routing',[]);
...modules here...
angular.module('myApp', [
  'myApp.home',
  'myApp.routing'
]);

所以你可以从myApp.home发送一个方法,从myApp调用一个中间方法,然后调用myApp.routing方法。

至少,这就是我的看法。