Разрешить услуги в app.run, плохая логика?

Я обнаружил проблему с выполнением вызовов службы в методе.run. Похоже, что контроллеры не дожидаются разрешения служб до перехода

.run(['User', 'Translation', function(User, Translation) ... service injection

Получить пользователя:

$rootScope.user = User.get();

Получить перевод на основе предпочитаемого вами пользователя

$rootScope.user.$promise.then(function(user) { $rootScope.translation = Translation.language(user.user_language.toLowerCase()).then(function(translation) { $rootScope.translation = translation.data; }); Do Intercom and other stuff...
});

В контроллере мы устанавливаем какое-либо свойство объекта на перевод, например

$scope.obj = { prop: $scope.translation.prop }

Это не удается в 10% случаев, я предполагаю, из-за того, что языковые службы еще не разрешены.

Вся инициализация таких материалов, как Intercom, Segment.io, основана на информации о пользователе, так что мы также пытались получить язык, разрешенный в.run

Вопрос в том, что я должен делать вместо этого. Кажется, повторяется, чтобы разрешить услуги в каждом состоянии (u-router) в приложении.

1 ответ

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

Я помню, как он упоминал о решении в своем последнем курсе:

angularjs-шаблоны-чистый код

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

licensed under cc by-sa 3.0 with attribution.