更好的方法是在AngularJS模块中声明一个控制器?

时间:2017-01-05 13:35:15

标签: angularjs

我观察到在AngularSeed中,一些控制器具有以下格式:

angular.module('myApp.controllers', []).
  controller('MyCtrl1', [function() {

  }])
  .controller('MyCtrl2', [function() {

  }]);

然而,某些控制器具有以下语法:

var myApp = angular.module('myApp',[]);

myApp.controller('MyCtrl1', ['$scope', function($scope) {

    } }]);


myApp.controller('MyCtrl2', ['$scope', function($scope) {

    } }]);

这对于生产项目来说是一个好习惯吗? 此外,这两种方法之间是否有任何性能差异?

3 个答案:

答案 0 :(得分:1)

这两种语法中的性能没有差异。 但建议我们使用第二种方法。

请记住,angular.module()返回一个模块对象。这将暴露控制器,过滤器,服务和指令注册的功能。 现在这些函数中的每一个都将返回相同的模块,因此我们讨论相同的参考。这类似于构建器模式。

根据Angular Best Practice for App Structure(公共),建议不要多次调用angular.module(),其他文件和模块不应修改相同的内容。 因此,建议使用后者。

逻辑很简单: 将您的模块公开为全局变量,并让其他文件添加到该变量。

答案 1 :(得分:1)

如果您的项目非常大,我建议您使用这种语法...

var controller = function (scope) {
};

controller.$inject = ["$scope"];

app.controller("appCtrl", controller);

答案 2 :(得分:-1)

如果每个文件只包含一个组件,则很少需要为模块引入变量。相反,使用简单的getter语法。使用模块时,使用带有getter语法的链接可避免变量冲突或泄漏。

来自John Papa's Angular style guide

/* avoid */
var app = angular.module('app');
app.controller('SomeController' , SomeController);

function SomeController() { }
     
/* recommended */
angular
.module('app')
.controller('SomeController' , SomeController);

function SomeController() { }