具有依赖项的 registerModule

Posted

技术标签:

【中文标题】具有依赖项的 registerModule【英文标题】:registerModule with dependencies 【发布时间】:2014-08-27 15:39:38 【问题描述】:

我正在使用 MEAN.JS 构建一个应用程序,并且我正在尝试使用来自另一个模块的控制器。我发现我可以通过依赖注入来做到这一点:

angular.module(‘MyModule’, [‘Dependency’]);

但是在 MEAN.JS 中创建模块的方式是:

ApplicationConfiguration.registerModule('MyModule');

我不能只将第二个参数传递给registerModule。那么,我该怎么做呢?我必须同时使用这两种方法吗?我做错了吗?


示例

我想添加一个新模型:CampaignCampaigns 仅由管理员创建,但“活动所有者”(另一个 User)可以看到。创建活动表单应列出可用用户,因此管理员可以选择将成为该 Campaign 的“所有者”的用户。 问题是,创建活动表单由CampaignsController控制,我如何列出Users?我使用了另一个控制器 (UsersController),这就是问题所在,它是未定义的,因为我们在 Campaign 模块中。


编辑:

问题是错误地自动重启应用程序: 我将控制器从一个模块(文件夹)移动到另一个模块,但 grunt 仍在尝试从旧路径加载它,因此失败:找不到控制器。我认为问题是依赖注入,但你只需要关闭 grunt (Ctrl+C) 并再次运行它。问题解决了。 无论如何,感谢@gilBirman 的回答,因为它是正确的:没有必要用 MEANJS 注入任何东西。

【问题讨论】:

所有角度模块自动注入主模块......所以你不需要将控制器注入另一个模块来使用它你已经拥有它...... 我在自定义模块中使用UsersController 时收到'UsersController' is not a function, got undefined 错误,那是什么意思?搜索错误所有答案都与“缺少依赖项”相关,但都是关于没有 MEAN.JS 的角度 【参考方案1】:

首先创建自己的模块例如:

angular.module('app.controllers', []) - angular module with controllers.

然后将控制器添加到该模块:

angular.module('app.controllers', [])
       .controller('dashboard.admin.account.controller', ['$scope', ($scope)  .... ]);

然后创建将绑定到您的标记的全局模块:

angular.module('app', [
  'app.controllers'
  'ui.router',
  'ngAnimate'
]);

然后将您的全局模块引导到标记:

domReady(function () 
  angular.bootstrap(document, ['app']);
);

现在你可以使用你的控制器了。

【讨论】:

我应该如何处理registerModule?我应该删除它吗?记得我使用的是 MEAN.JS,情况有点不同:github.com/meanjs/mean 我没有足够的知识 mean.js,但文档告诉我需要像我描述的 screencast.com/t/H1QWDJjfZ5 那样使用角度模块。 @VitaliyKhudonogov 我可以从哪个 URL API 文档查看此屏幕截图【参考方案2】:

MEAN.js 将通过registerModule 注册的所有模块都可用于您应用中的所有其他模块,方法是将其作为依赖项添加到名为mean 的主应用中。这是执行此操作的 MEAN.js 源代码的一部分:

var applicationModuleName = 'mean';
....
// Add a new vertical module
var registerModule = function(moduleName) 
    // Create angular module
    angular.module(moduleName, []);

    // Add the module to the AngularJS configuration file
    angular.module(applicationModuleName).requires.push(moduleName);
;

所以你在正确的轨道上,但听起来你正在尝试注入控制器。但是,在 Angular 中,控制器是不可注入的。您可以注入 servicesfactoriesvaluesconstants

【讨论】:

你好,这是否意味着每个模块都应该是 mean-(root)-Module 的依赖项?如何在子模块上设置依赖项?

以上是关于具有依赖项的 registerModule的主要内容,如果未能解决你的问题,请参考以下文章

具有依赖项的 registerModule

无法安装具有 C 依赖项的 Python 库

具有 maven 依赖项的 Java ClassNotFoundException

安装具有依赖项的 Windows 服务

在android中创建一个具有依赖项的库

从 CRAN 镜像安装具有依赖项的本地 R 包