与一组控制器的初始化相同

时间:2014-09-11 06:21:24

标签: javascript angularjs

假设我有50个控制器,其中25个需要相同的初始化代码,例如:

$scope.a = 1; $scope.b = "a"; ... $scope.zzz = "xyz";

最好的方法是什么?我不想复制并粘贴25个控制器的每个开头?我不想提出25个观点' ng-init也是。

更新1

我正在使用angular-ui-router,每个控制器都是每个视图/模板的状态。也许有一种方法可以在angular-ui-router更多DRY中执行此操作?

4 个答案:

答案 0 :(得分:1)

我提到的服务示例可以像这样实现:

angular.service('yourService',function() {
    return {
          setInitialValues: function(scope) {
              scope.a = 22;
              //All your Initial values
          }
    }
});

在控制器中注入服务并将范围传递给控制器​​并将其设置在控制器上。这将在Angular的范围内工作,这里没有任何全局

答案 1 :(得分:0)

您只需声明一个函数

var f = function($scope) {
    //Init stuff here
} 

然后在本文所写的所有25名控制者中使用它。

// controler1 init .....     F($范围);

答案 2 :(得分:0)

看起来你的项目有一天会变得很大。

我建议最好的方法是使用类似库的Class.js。

为将要创建的所有对象创建.init()和.destroy()。

答案 3 :(得分:0)

您可以使用原型继承。把它想象成有一个基类或抽象类,你的其他类继承。

var BaseCtrl = function($scope) {
    $scope.a = 1;
    ... 
});

var AnotherCtrl = function($scope) {
    BaseCtrl.call(this, $scope);
    ....
});
AnotherCtrl.prototype = Object.create(BaseCtrl.prototype, {});

如果使用ControllerAs,语法会有所不同。