Получить доступ к $rootScope в файле resol и root index.html
Две вещи -
В заголовке моего index.html у меня есть скрипт вендора, в который я хотел бы передать переменную, относящуюся к среде.
<script type="text/javascript">!function () {analytics.load(--->code here<----);();</script>
Я прикрепил переменную к $rootScope в блоке выполнения, но она не выглядит готовой, когда загружается этот HTML. Я могу войти в тот же код с
<a data-ng-click="$log.log('code', code)">code</a>
но он не кажется готовым при запуске тега head.
Кроме того - у меня есть некоторые другие значения, которые я прикрепил к $rootScope, которые недоступны при выполнении разрешения. Это не определено в сервисе. Если я создаю console.log в этой службе и console.log в блоке run, служба сначала регистрируется как неопределенная, а затем, когда выполняется блок run, он был установлен правильно.
Что мне нужно сделать, чтобы использовать эти переменные в элементе заголовка корневого файла index.html и в разрешении?
resolve: {
auth: ['service', function (service) {
return service.resolve()
}]
}
service.resolve вызывает несколько различных сервисов для переменных зависимостей, требуемых перед отображением страницы.
Обновить
Решение, которое я упоминал ранее, является функцией $route.resolve. Он помещается в routeProvider и запускается до загрузки страницы.
templateUrl: '/user.html',
controller: 'User',
controllerAs: 'user',
resolve: {
auth: ['service', function (service) {
return service.resolve()
}]
}
Разрешить содержание функции -
self.profilePromises().then(function (resp) {
//this resp object is an array of promises that are mostly put into rootscope and/or used as params for other app setup functions - all things that need to be ready before the page resolves
var map = self.resultMap
for (var i = 0; i < resp.length; i++) {
$rootScope[map[i]] = resp[i].data.data
switch (map[i]) {
case 'abc':
$rootScope.abc = resp[i].data
break
case 'def':
setUser(resp[i].data.data)
break
// etc
}
}
return $q.when({auth: true})
}, function (resp) {
return $q.reject({auth: false})
})
$route.resolve может принимать несколько аргументов функции, которые должны быть выполнены до инициализации страницы. Это лучший способ, который я нашел для получения переменных, необходимых для загрузки страницы. Поэтому они часто являются службами, которые выбирают пользовательские данные, которые используются для заполнения страницы, например, после входа в систему. Эти переменные, которые я пытаюсь прикрепить к rootScope, происходят из нашей сборки, которая будет передавать параметры хоста и порта относительно производства или QA. Другими словами, я хочу назначить эти домены при сборке приложения в зависимости от среды.
1 ответ
Я прикрепил переменную к $rootScope в блоке выполнения, но она не выглядит готовой, когда загружается этот HTML.
$rootScope
доступно, когда angular проходит процесс начальной загрузки и создает $injector
, Процесс усиления может быть начат через ng-app
директива или angular.bootstrap
метод. В любом случае, они должны быть вызваны, когда DOM
готов, потому что угловой не может загрузиться без DOM
элемент. Все скрипты в head
блоки выполняются до того, как DOM будет готов, и поэтому нет никакого способа получить доступ $rootScope
в таком случае.