AngularJS - Доступ к переменным ng-init из метода run

1) У меня есть переменные, инициализированные в ng-init Например:

ng-init="password='Mightybear'";

2) Я хочу получить к нему доступ из метода.run. Например -

anguar.module("ngApp", [])
.run(function() {
//Access password here
});

Ниже сценариев я пробовал, и не получилось -

1) angular.module("ngApp", [])
.run(function($rootScope) { 
console.log($rootScope.password) //undefined!!!
});

2) angular.module("ngApp", [])
.run(function($rootScope, $timeout) { 
$(timeout(function() {
console.log($rootScope.password) //undefined!!!
});
});

2 ответа

Решение

Вы не можете получить значение ng-init внутри вашего run блок

Угловой LifeCycle

  1. Этап настройки (app.config) ($rootScope здесь недоступен)
  2. Run Phase (app.run) ($ rootScope будет доступен здесь)
  3. Директива получает компиляцию ()
  4. Затем выполняется контроллер, функция директивной ссылки, фильтр и т. Д. (ng-init это здесь)

Если вы хотите получить значение инициализации в фазе выполнения, то вам нужно установить это значение в фазе конфигурации.

Если вы хотите установить значение в конфигурации, то вы можете использовать app.constant/provider которые доступны на этапе настройки, не используйте $rootScope это считается плохим паттерном в AngularJS.

Код

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

app.constant('settings', {
    title: 'My Title'
})

app.config(function(settings) {
    setting.title = 'Changed My Title';
    //here can you do other configurarion setting like route & init some variable
})

app.run(function(settings) {
    console.log(settings.title);
})

Я дам вам пошаговое руководство, о том, как угловые нагрузки

угловой модуль ---> .config ----> .run ----> контроллеры (ng-init)

Теперь вы можете очистить свой подход.

Другие вопросы по тегам