【问题标题】:AngularJS - How to route to a controller in different moduleAngularJS - 如何路由到不同模块中的控制器
【发布时间】:2014-11-27 23:11:43
【问题描述】:

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

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

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

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

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

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

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

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

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

非常感谢!

【问题讨论】:

  • AFAIK 现在,这是不可能的,您需要创建对所需控制器模块的依赖关系,或者您可以创建引用前两个模块的第三个模块。更多细节在这里:stackoverflow.com/questions/16113890/…

标签: angularjs


【解决方案1】:

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

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

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

至少,我是这么看的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 2014-06-18
    相关资源
    最近更新 更多