2016-05-18 14 views
0

ich mobile app mit ionischen framework.it entwickle hat eine Seite im Menü mit folgenden LinksHybrid ionische mobile app: hide Login-Bildschirm nach erfolgreicher Anmeldung

1.Home

1.Melden

2 .Über

3.Einstellungen

Wenn der Benutzer angemeldet ist in i die login in Seitenmenü myprofile Link ändern wollen

Im Login-Controller

.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'); 
    } 
}}) 

Im Menü Controller

.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; 
    } 

}); 

Hier ist 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> 

Das Problem es das Profil Link nach dem Login zeigen dosen't, aber wenn Ich aktualisiere die gesamte Seite es wird so funktionieren, wie ich es erwartet hatte Wie löst man dieses Problem?

UPDATE

I

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

der Staat das Problem über reload gelöst haben, aber ich wil eine andere Fehlermeldung erhalten, fehlt Seite Menü von meinem user_profilepage Ich habe diese enable-menu-with-back-views="true" in menu.html hinzugefügt , aber immer noch habe ich das Menü fehlt Problem :(

Hinweis: Ich benutze ich onic Registerkarten Vorlage

+0

Haben Sie den $ timeout versucht Lösung? Hat es für dich funktioniert? –

Antwort

0

Versuchen Sie Ihren Auftrag mit $ Verpackung gelten, wie folgt aus:.

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

Wenn Sie einen Fehler ein Digest sagen bereits ausgeführt wird, tauschen $ scope $ gelten mit $ timeout, Das ist ein Service, den Sie injizieren müssen. Dies verzögert die Aktualisierung bis zum nächsten Digest, wenn Sie keine bestimmte Verzögerung angeben.

zuerst in Ihren Controller So injiziert, indem sie es als Parameter hinzu:.

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

Dann $ Umfang ersetzt aus der vorherige Auflistung gilt $:

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

wie man '$ scope.apply' in 'timeout' einpackt, bekomme ich digest schon laufender Fehler –

+0

Ich habe die Antwort aktualisiert, um ein richtiges Beispiel zu zeigen, wie man $ timeout benutzt. –

Verwandte Themen