我是从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);
我得到:
答案 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']);