在AngularJS中向模块添加控制器数组:最佳方式

时间:2015-08-07 14:30:55

标签: angularjs

我刚刚通过了一个代码,程序员创建了一个控制器数组,然后将数组添加到模块中。

以下是代码类型: -

// the array of controllers
var controllers = {};

//adding a controller to array
controllers.ExampleController1 = function(){};
controllers.ExampleController2 = function(){};

//adding the controllers to module
var ABCmodule=angular.module('ABCmodule',[]);
ABCmodule.controller(controllers); 

我意识到控制器阵列是在全球范围内制作的。那不是很危险吗?此外,这是一种良好的编码风格。我更喜欢只为模块创建一个变量并在该模块中添加所有控制器。这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:0)

这个细节设置可以通过以下方式解决:

for (var ctrl in controllers) {
    if(controllers.hasOwnProperty(ctrl)) {
        ABCmodule.controller(ctrl);     
    }
}

话虽如此,为什么不直接将控制器添加到将首先声明的模块?使用lodash的_.forOwn()

也可以简化循环
angular
    .module('abc', [])
    .controller('ctrl1', ctrl1)
    .controller('ctrl2', ctrl2); // ...

 function ctrl1() {
 }

 function ctrl2() {
 }

答案 1 :(得分:0)

Angular始终在内部执行此操作,但您不必将其源代码样式作为paragon接受。将变量保存在IIFE中是可以的。

如果你想保持风格,你可以这样做:

ctrlModule.config(function ($controllerProvider, controllers) {
    angular.forEach(controllers, function (constructor, name) {
        $controllerProvider.register(name, constructor);
    });
});

ctrlModule.constant('controllers', { ... });