Angularjs:在匿名函数内的模块上注入Controller

时间:2015-06-14 02:07:09

标签: javascript angularjs

我与javascript有点新闻,我开始使用angular.js

所以我的问题是,是否有办法在匿名函数中声明的模块中注入控制器

我的代码看起来像这样

app.js

(function(angular) {
    var app = angular.module('Organizer', ['ngMaterial', 'ngAnimate', 'ngAria']);
})(angular);

siteController.js

(function(angular, app) {
    app.controller('site', function($scope, $mdDialog)
    {
        var alert = $mdDialog.alert({
            title: 'Test',
            content: 'Testing',
            ok: 'Exit'
        });

        $mdDialog.show(alert);
    });
})(angular);

我试图寻找方法,如果有可能,但我仍然想看看这里是否有人可以解释如果可以做到这一点。

注意:之前我已经使用过angular.js,我想尝试一种不同的方式来声明控制器,以便客户端无法修改它

2 个答案:

答案 0 :(得分:2)

如果您在Angular中创建模块,则无法以这种方式对其进行模糊处理。在控制台中,用户只需运行angular.module('Organizer')即可访问您的应用,然后调用他们想要的任何方法。

您的代码无法按照书面形式工作的原因是因为您没有将app变量传递给您的匿名函数。因此,如果您想将控制器添加到Organizer模块,那么您可以执行以下操作:

(function(angular)
{
    angular.
      module('Organizer').
      controller('site', function($scope, $mdDialog)
      {
          ...
      });
})(angular);

答案 1 :(得分:1)

Theres无需在自动执行函数中包含任何此代码,就像您尝试将变量保留在全局范围之外一样。唯一一个全球性的是" angular"对象

你的app.js应该只有

'use strict';
angular.module('Organizer', ['ngMaterial', 'ngAnimate', 'ngAria']);

您的控制器文件应该只有

'use strict';
angular.module('Organizer').controller('siteController', function($scope, $mdDialog) {
    var alert = $mdDialog.alert({
        title: 'Test',
        content: 'Testing',
        ok: 'Exit'
    });

    $mdDialog.show(alert);
});

app.js中对模块的第一次调用传递了angular用于实例化模块的第二个参数。后续调用省略第二个参数" get"模块。