Angular:何时在模块和控制器中使用“[]”

时间:2017-03-31 14:49:01

标签: javascript angularjs

我是从Angular开始的,当我声明(如果它被称为这样的)模块和控制器时,我不明白何时使用或不使用[]

到目前为止,我理解:

angular.module('app.prof', []).config(config);表示我声明模块prof

angular.module('app.prof').config(config);表示我致电

但我总是在控制器中而不是在模块中使用[],当我有两个控制器时,我不知道该怎么做。

我只想了解Angular :(

修改:添加更多详情

在我的Angular项目中,我使用Fuse主题和一个名为Yeoman的东西(如果我理解的话),所以我从不在任何地方写<script>个标签。

例如,我有这个模块:

    angular
    .module('app.prof')
    .config(config);

和这个控制器:

    angular
    .module('app.prof', [])
    .controller('ProfController', ProfController);

我的模块和控制器总是以这种方式声明,但有时会出现“未声明模块”或“未声明控制器”等错误;让我最终随机地将括号放在模块或控制器中,直到它工作。

编辑2:

这是我的主要模块:

angular
    .module('fuse', ['app.prof']);

我的教授模块:

    angular
    .module('app.prof')
    .config(config);

和我的教授控制员:

    angular
    .module('app.prof', [])
    .controller('ProfController', ProfController);
这样,整个过程都很好。但是当我这样做时:

    angular
    .module('app.prof', [])
    .config(config);

    angular
    .module('app.prof')
    .controller('ProfController', ProfController);

我得到:

errors

4 个答案:

答案 0 :(得分:2)

第二个参数是模块的依赖项。由于您目前没有任何依赖项,因此您有一个空数组[]

仅在创建新模块时添加括号(依赖项)。每当您只想使用相同的模块时,您就不应该使用括号。所以最后每个模块只能用[]声明一次。而且每隔一段时间都应该没有。

还要确保以正确的顺序导入文件和代码。否则,当您尝试向其添加控制器时,尚未定义模块。

小例子。带有多个控制器的App模块。

angular.module('app', []);

angular.module('app').controller('aCtrl', [ function () {} ]);
angular.module('app').controller('bCtrl', [ function () {} ]);

// ...

长话短说。如果声明模块,则需要括号。如果您想使用该模块,请不要添加它们。

修改:对于您的编辑,您需要确保以正确的顺序定义和使用所有内容。

以下内容取决于app.prof,这意味着app.prof声明需要在此行之前:

angular.module('fuse', ['app.prof']);

这已经表明模块app.prof已声明,您尝试向其添加配置。如果在您收到类似错误之前未声明app.prof:

angular.module('app.prof')
    .config(config);

这声明了模块app.prof并向该模块添加了一个控制器:

angular.module('app.prof', [])
    .controller('ProfController', ProfController);

这声明app.prof模块并立即向其添加一些配置:

angular.module('app.prof', [])
    .config(config);

这会将控制器添加到名为app.prof的现有模块中:

angular.module('app.prof')
    .controller('ProfController', ProfController);

我想你明白了......

至于解决方案,您需要按照与此类似的顺序声明这些...如果所有内容都在一个文件中,或者您逐个文件加载它们,但模块声明顺序很重要。

angular.module('app.prof', [])
    .config(config);

angular.module('app.prof')
    .controller('ProfController', ProfController);

angular.module('fuse', ['app.prof']);

控制器声明可能会在以后发生,但无论如何你需要注意顺序。正如您所说,fuse是您需要在app.prof之前声明{。}}的主要模块。

答案 1 :(得分:1)

在angular中,“[]”用于将外部(角度)依赖项注入模块并获取它的访问权限。参考以下示例

angular.module('app.proof',['myservice']).controller(function(bootstrap,myservice){
 myservice.callmethod();});

希望这有帮助!

答案 2 :(得分:1)

因此,当您创建模块时,您可以将其他模块添加为您计划使用的依赖项:

var app = angular.module('myModule', ['Restangular', 'UserService', 'otherModule']);

然后,当您创建控制器时,您可以为控制器提供服务,工厂等。

app.controller('MyNewController', ['$scope', '$http', 'restangular', function($scope, $http, restangular) {
    // Your code here
    $scope.name = "Daniel";
});

答案 3 :(得分:1)

您可以声明一个这样的模块:

 angular.module('myModule', []);

同样,你可以像这样声明一个控制器:

 angular.module('myModule')
    .controller('MyController', []);

当您声明控制器时,您没有在模块中使用空数组表示法,因为您在现有模块上定义了一个控制器。

传递给模块或控制器的空数组([])是要插入模块或控制器的依赖项的占位符。请参阅:AngularJS Depedency Injection

每个AngularJS项目都有一个“顶级”或根模块。这是根据ng-app指令使用它时将应用程序引导到一起的模块。

在顶级模块中,您将依赖项声明为应用程序中的其他模块。例如:

angular.module('root', ['childModule1', 'childModule2', 'childModule3']);

在您的控制器中,您使用依赖注入来注入服务,函数或AngularJS的内置库(例如$ http,$ sce或$ q)例如:

angular.module('root')
    .controller('RootController', ['$window', '$location', 'myRootService']);