2017-03-31 51 views
1

我开始使用Angular,并且我不明白何时使用或不使用[]时声明(如果它是这样的)模块和控制器。Angular:何时在模块和控制器中使用“[]”

到目前为止,我明白了:

angular.module('app.prof', []).config(config);意味着我声明模块prof

angular.module('app.prof').config(config);意味着我呼叫它。

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

我只是想了解角:(

编辑:添加更多的细节

在我的角度项目中,我使用的保险丝主题,一个叫约曼(如果我深知)的事情,所以我从来不写。<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

+0

哎呀小打字错误 – Orsu

+0

如果您给出与您的示例相对应的特定错误,这将有所帮助。因此,不要说“有时候我会得到这样或那样的错误”,请说“用这个示例代码我看到了这个特定的错误”。你会更有可能得到一个有用的答案。 –

+0

我添加了一个截图和更多的信息,如你想要的 – Orsu

回答

2

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

只有在创建新模块时才添加括号(依赖关系)。每当你只想使用同一个模块时,你都不应该有括号。所以最后每个模块只能用[]声明一次。并且每隔一段时间都应该被调用。

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

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

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模块ANDS立即增加了一些配置,以它:

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

+0

为了使它更清晰:我使用Fuse主题,如果我理解的很好,所以我永远不会导入任何东西 – Orsu

+0

Yeoman可能会帮助你将外部脚本注入应用程序。但无论如何,如果你想在你自己的控制器和服务中使用外部服务,你必须确保你的Angular应用程序知道这些其他模块。然后,您需要将这些模块作为依赖项添加到您自己的模块中,如下所示:'angular.module('app',['ui.bootstrap','ngAnimate'])''。 –

+0

@Orsu我编辑答案回答你添加的问题。 –

1

在角度上,“[]”是为了向你的模块注入外部(角度)依赖关系并获得它的访问权限。参考下面的例子

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

希望这有助于!

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"; 
}); 
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']); 
相关问题