У меня есть следующий код:AngularJS: ngClass не является обновлением после запроса HTTP
angular.module('myApp')
.controller('MyCtrl', function ($scope,$rootScope, $filter, $location,$translate,$cookies,NavigationService) {
\t $scope.appVersion = "";
\t $scope.credentials = {};
\t $scope.userLanguage = null;
\t
\t var init = function(){
\t \t authenticate();
\t \t getAppVersion();
\t };
\t
\t var getAppVersion = function() {
\t \t NavigationService.getAppInfo()
\t .then(function (response) {
\t $scope.appVersion = response.data.build.version
\t });
\t };
\t
\t var authenticate = function (credentials, callback) {
\t $rootScope.authorities = [];
\t $rootScope.currentUser = null;
\t NavigationService.doAuthentication(credentials).success(function (data) {
\t $rootScope.authenticated = !!data.name;
\t $rootScope.authorities = data.authorities;
\t $rootScope.currentUser = data.name;
\t $scope.userLanguage = data.userLang;
\t callback && callback();
\t }).error(function (response) {
\t $rootScope.authenticated = false;
\t callback && callback();
\t });
\t };
...
<div ng-show="authenticated" class="btn-group btn-group-xs btn_change_language">
<button ng-class="{'button_selected': userLanguage == 'de'}" class="btn btn-default"
ng-click="changeLanguage('de')" translate>
BTN_GERMAN_LANGUAGE
</button>
<button ng-class="{'button_selected': userLanguage == 'en'}"
class="btn btn-default" ng-click="changeLanguage('en')" translate>
BTN_ENGLISH_LANGUAGE
</button>
</div>
Проблема заключается в том, что когда я открываю браузер и загрузить страницу, директива ngClass получить начальное значение userLanguage (null), а не значение, которое приходит из моего запроса (data.userLang), поэтому класс «buttom_selected» не применяется. Я уже отлаживал его, и значение начинается нормально, однако ngClass просто обновляется, если я перезагружаю страницу. Странно то, что, если я открываю новую вкладку, она работает нормально, но если я закрою и открою браузер и получаю доступ к приложению, ngClass игнорирует изменение, сделанное обратным вызовом NavigationService.
Я попробовал $ scope. $ Apply(), но он говорит, что $ digest уже выполняется.
вы можете использовать $ таймаут, если вы сталкиваетесь с $ переваривать в процессе ошибка, так как в конце таймаута вызывается $ apply. Смотрите: http://stackoverflow.com/questions/12729122/angularjs-prevent-error-digest-already-in-progress-when-calling-scope-apply. Однако главная проблема - это что-то еще. –
Похоже, что у вас есть другая ошибка на вашей странице, так как код, который у вас есть в ng-классе, выглядит правильно. Если вы просто выведете {{userLanguage}}, то где-то на вашей странице оно обновится, как ожидалось? – jtsnr
@KiranYallabandi, спасибо за ваш ответ. Я пробовал эти решения, но, к сожалению, он не работает. –