5

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

一旦路由被触发,它应该调用一个控制器(TestCtr例如调用)。这个控制器是在另一个模块中定义的——我们称之为它ModuleCtrl

如果我尝试这样做,我会遇到如下异常:

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

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

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

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

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

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

非常感谢!

4

1 回答 1

1

您可以将单个模块与每个功能的子模块一起使用,例如:

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

因此,您可以从 myApp.home 发送一个方法,从 myApp 调用一个中间方法,而这个调用 myApp.routing 方法。

至少,我是这么看的。

于 2014-11-27T15:11:43.460 回答