2014-09-11 2 views
0

Пусть у меня есть 50 контроллеров и 25 из них нуждаются в один и тот же код инициализации, который несколько долго, такие как:же инициализация с набором контроллеров

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

Что является лучшим способом? Я не хочу копировать и вставлять в каждое начало 25 контроллеров? Я тоже не хочу ставить 25 просмотров 'ng-init.

ОБНОВЛЕНИЕ 1

Я использую angular-ui-router и каждый контроллер в состоянии за просмотр/шаблона. Может быть, есть способ сделать это в angular-ui-router еще DRY?

+0

Сделать функцию, зарегистрированную в области $ scope, и вызывается 25 раз? – Kostronor

+1

имеют код инициализации в службе, а затем вводят эту службу во все контроллеры, в которых требуется – V31

ответ

0

Вы просто объявляете функцию

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

Затем используйте его во всех 25 контрольных приборов прописан под этим текстом.

// контролер1 init ..... f ($ scope);

+0

. Тогда 'f' будет глобальной переменной. Есть ли способ сдерживаться в самом угловом? –

1

Сервис пример того, что я уже может быть достигнуто, как это:

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

И в контроллере впрыснуть услуги и передать свои возможности в контроллер и установить его на своих. Это будет работать в области Angular, и здесь нет ничего глобального.

+0

Еще один способ - использовать свойство разрешения в угловом ui-router, однако в этом вам также потребуется повторить это во всех представлениях, в которых будут 25 контроллеров. Поэтому сервис - это лучший способ продвижения вперед. – V31

+0

вы также можете использовать $ rootScope, однако это будет использоваться в других контроллерах, для которых эта инициализация не требуется (поскольку она является глобальной), так что в этом случае вариант также не очень хорош – V31

0

Похоже, что ваш проект когда-нибудь будет большим.

Я предлагаю, что лучший способ - использовать библиотеку Class.js.

Создайте объекты .init() и .destroy() для всех объектов, которые будут созданы.

0

Вы можете использовать прототипное наследование. Подумайте об этом как о базовом или абстрактном классе, который унаследуют ваши другие классы.

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

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

Синтаксис будет немного иным, если вы используете ControllerAs.

Смежные вопросы