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
- Этап настройки (app.config) ($rootScope здесь недоступен)
- Run Phase (app.run) ($ rootScope будет доступен здесь)
- Директива получает компиляцию ()
- Затем выполняется контроллер, функция директивной ссылки, фильтр и т. Д. (
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)
Теперь вы можете очистить свой подход.