2016-05-18 2 views
0

Я занимаюсь разработкой мобильных приложений с ионным framework.it имеет боковое меню со следующими ссылкамиHybrid ионного мобильное приложения: шкура Войти экран после успешной регистрации

1.Home

1.Войдите

- .О

3.Settings

Когда пользователь вошел в систему, я хочу, чтобы изменить login в боковом меню для myprofile связи

В контроллере входа

.controller('LoginCtrl',function($scope,$http,$ionicPopup,$state){ 
    $scope.login=function(user){ 
     //http call for login api 
     //set the auth token 
     window.localStorage.setItem('usertoken',response.token); 
     $state.go('app.profile'); 
    } 
}}) 

В контроллере меню

.controller('MenuCtrl', function($scope, $ionicModal, $timeout) { 

    //shows the login link when the user is not logged in othewise show profile. 
    if(window.localStorage.getItem('usertoken')==null){ 
     $scope.showloginlink=true; 
     $scope.showprofilelink=false; 
    }else{ 
     $scope.showloginlink=false; 
     $scope.showprofilelink=true; 
    } 

}); 

Вот htmll

<ion-list > 
     <ion-item menu-close href="#/app/login" ng-show="showloginlink"> 
      Login 
     </ion-item> 
     <ion-item menu-close href="#/app/profile" ng-show="showprofilelink"> 
      Profile 
     </ion-item> 

Проблема это dosen't показать ссылку на профиль после входа в систему, но когда я обновляю всю страницу, она будет работать, как я ожидал Как решить эту проблему?

UPDATE

Я решил проблему путем перезагрузки состояние

$state.go('app.profile',null,{reload: true}); 

Но я Виль получить другую ошибку, дополнительное меню отсутствует из моего user_profilepage Я добавил этот enable-menu-with-back-views="true" в menu.html , но все же у меня есть недостающее меню :(

Примечание: я использую i ОНИК шаблон вкладки

+0

Вы пробовали $ тайм-аут решение? Это сработало для вас? –

ответ

0

Попробуйте оборачивать ваше задание с $ применяется, например:.

$scope.$apply(function() { 
    if(window.localStorage.getItem('usertoken')==null){ 
     $scope.showloginlink=true; 
     $scope.showprofilelink=false; 
    }else{ 
     $scope.showloginlink=false; 
     $scope.showprofilelink=true; 
    }  
}); 

Если вы получите ошибку сказать дайджест уже работает, замените $ объем $ применять с $ таймаута, который представляет собой услугу, которую вам нужно будет вводить. Это отложит обновление до следующего дайджест, если вы не укажете конкретную задержку.

Так первый закачкой его в контроллер, добавив его в качестве параметра:.

.controller('LoginCtrl',function($scope,$http,$ionicPopup,$state, $timeout){ 

Затем замените $ объем $ применяются из предыдущего предложения:

$timeout(function() { 
    if(window.localStorage.getItem('usertoken')==null){ 
     $scope.showloginlink=true; 
     $scope.showprofilelink=false; 
    }else{ 
     $scope.showloginlink=false; 
     $scope.showprofilelink=true; 
    }  
}); 
+0

Как обернуть '$ scope.apply' в' timeout'?, Я получу ошибку, уже запущенную ошибку –

+0

Я обновил ответ, чтобы показать правильный пример использования $ timeout. –

Смежные вопросы