6

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

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

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

ApplicationConfiguration.registerModule('MyModule');

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


例子

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


编辑:

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

4

2 回答 2

11

MEAN.jsregisterModule通过将其作为依赖项添加到名为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 中,控制器是不可注入的。您可以注入服务工厂常量

于 2014-07-10T04:39:22.107 回答
2

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

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']);
});

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

于 2014-07-07T08:28:53.243 回答