对一组控制器进行相同的初始化

Same initialization to a set of controllers

本文关键字:初始化 控制器 一组      更新时间:2023-09-26

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

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

最好的方法是什么?我不想复制并粘贴在25个控制器的每一个开头?我也不想放25个视图的ng-init

更新1

我使用的是angular-ui-router,每个控制器都是每个视图/模板的每个状态。也许有一种方法可以在angular-ui-router中做到这一点?

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

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

并且在控制器中注入服务,并将您的作用域传递给控制器,并将其设置在它们之上。这将在Angular的范围内工作,并且这里没有全局

您只需声明一个函数

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

然后在本文下面写的所有25个控件中使用它。

//controler1初始化。。。。。f($范围);

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

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

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

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

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

如果您使用的是ControllerAs,则语法会有所不同。