Javascript 角度:何时使用;[……”是;在模块和控制器中

Javascript 角度:何时使用;[……”是;在模块和控制器中,javascript,angularjs,Javascript,Angularjs,我从Angular开始,我不知道在声明(如果这样称呼)模块和控制器时何时使用或不使用[] angular.module('app', []); angular.module('app').controller('aCtrl', [ function () {} ]); angular.module('app').controller('bCtrl', [ function () {} ]); // ... 到目前为止,我了解到: angular.module('app.prof',[]).

我从Angular开始,我不知道在声明(如果这样称呼)模块和控制器时何时使用或不使用
[]

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

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

// ...
到目前为止,我了解到:

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

angular.module('app.prof').config(config)表示我叫它

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

我只是想了解:(

编辑:添加更多详细信息

在我的Angular项目中,我将Fuse主题与一个名为Yeoman的东西结合使用(如果我理解得很好的话),因此我从不在任何地方编写
标记

例如,我有这个模块:

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

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
的主要模块。

在angular中,“[]”用于注入外部(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', []);
类似地,您可以这样声明控制器:

 angular.module('myModule', []);
 angular.module('myModule')
    .controller('MyController', []);
当您声明控制器时,您没有在模块中使用空数组表示法,因为您是在已经存在的模块上定义控制器

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

每个AngularJS项目都有一个“顶级”或根模块。当您按照
ng app
指令使用应用程序时,该模块将引导您的应用程序

在顶级模块中,您可以声明与应用程序中其他模块的依赖关系。例如:

angular.module('root', ['childModule1', 'childModule2', 'childModule3']);
在控制器中,使用依赖项注入来注入服务、函数或AngularJS的内置库(例如$http、$sce或$q),例如:

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

如果你给出了一个与你的例子相对应的特定错误,那会有所帮助。所以不要说“有时我会遇到这样或那样的错误”,而是说“通过这个例子代码,我看到了这个特定的错误”。你很可能会得到一个有用的答案。我添加了一个屏幕截图和更多你想要的信息,以使其更清楚:我使用Fuse主题,如果我理解得很好的话,我会使用一个名为Yeoman的东西,因此我从不导入任何东西。myselfYeoman可能会帮助你将外部脚本注入到应用程序中。但无论如何,如果你想使用外部服务,我会在您自己的控制器和服务中,您必须确保您的Angular应用程序了解这些其他模块。然后您需要将这些模块作为依赖项添加到您自己的模块中,如下所示:
Angular.module('app',['ui.bootstrap','ngAnimate'))
@Orsu我编辑了答案以回答您添加的问题。谢谢您提供了这个非常完整的答案!我认为现在答案更清晰了