Kozack
@Kozack
Thinking about a11y

Как получить асинхронно значение в Angular?

Здравствуйте. Пытаюсь сделать браузерное расширение на angular. Но есть проблема с асинхронным получением данных.
В памяти браузера хранится ID пользователя. И это значение используется повсюду.
Вот простой пример:
angular.module('PopupApp', [])

	.config(['$provide', function ($provide) {
		console.log('.config');
		$provide.value('ID',null);

		chrome.storage.local.get('ID', function (stg) {
			console.log('.config.chrome.storage.local.get');
			console.log('.config.chrome.storage.local.get, ID:' + stg.ID);
			$provide.value('ID',stg.ID);
		});
	}])

	.run(['ID', function (ID) {
		console.log('.run');
		console.log('.run, ID:' + ID);
	}])

	.controller('MyCtrl', ['$scope', 'ID', function ($scope, ID) {
		console.log('.controller');
		console.log('.controller, ID:' + ID);
		$scope.ID = ID;
	}]);

В консоль выводится следующее:
.config
.run
.run, ID:null
.controller
.controller, ID:null
.config.chrome.storage.local.get
.config.chrome.storage.local.get, ID:123

Как видно, в секциях run и controller переменная ID пустая, потому, что в нее ещё не было установлено значение.

Как вариант решения - повсюду использовать callback функции, которые срабатывают после получения ID. Но я подумал, может есть более грамотное решение? Может как-то можно приостановить работу Angular (Чтобы запустилась секция config а все остальные запустились только после того, как будут получены данные)?
  • Вопрос задан
  • 211 просмотров
Пригласить эксперта
Ответы на вопрос 1
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы