繁体   English   中英

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

[英]Angular : When to use “[]” in modules and controllers

我从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);

我得到:

错误

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

仅在创建新模块时才添加方括号(依赖项)。 每当您只想使用相同的模块时,都不需要括号。 因此,最后每个模块仅应使用[]声明一次。 并且每隔一个时间都应调用不带。

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

小例子。 具有多个控制器的应用模块。

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模块并立即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

用[[]]表示的是将外部(angular)依赖项注入到模块中并对其进行访问。 请参考以下示例

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

希望这可以帮助!

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

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

然后,在创建控制器时,可以使控制器可以使用服务,工厂等。

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

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

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

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

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

在声明控制器时,您不会在模块中使用空数组符号,因为您是在现有模块上定义控制器。

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

每个AngularJS项目都有一个“顶层”或根模块。 当您根据ng-app指令使用应用程序时,该模块会将您的应用程序引导到一起。

在顶层模块中,您声明对应用程序中其他模块的依赖性。 例如:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM