2016-03-20 3 views
0

Ich habe eine ionische App erstellt, die den Token-Wert jedes Mal setzt, wenn eine erfolgreiche Anmeldung vom Benutzer vorgenommen wurde. Dann wird $ state.go verwendet, um den Benutzer zu einem anderen Tab "tab.scan" umzuleiten.Überprüfen Sie den lokalen Speicherwert und übergeben Sie Parameter unter state.go in IONIC

Wenn der Benutzer in der Navigationsleiste auf die Registerkarte "tab.details" geklickt hat, wird der Benutzer auf "tab.details" umgeleitet, ohne irgendwelche Parameter zu übergeben.

Die Seite "Details" konnte den Wert des gespeicherten Tokens jedoch nicht ermitteln. Wie kann ich es tun?

Es funktioniert gut, wenn die URL url: '/details' anstelle von url: '/details/:store_id/:invoice_id' ist.

-Code für die Anmeldung

.controller('LoginCtrl', function ($scope, LoginService, $ionicPopup, $state, $stateParams) { 
    $scope.data = {}; 
    $scope.token = { token: "" }; 

    $scope.login = function() { 
     LoginService.loginUser($scope.data.username, $scope.data.password).success(function (data) { 
      //Set login token 
      localStorage.setItem("token", $scope.data.username); 
      //Redirect the user to scan tab 
      $state.go('tab.scan', { store_id: $scope.data.store_id }); 
      //Popup alert for welcome message 
      var alertPopup = $ionicPopup.alert({ 
       title: 'Login Success!', 
       template: 'Welcome ' + localStorage.getItem("token") + '!' 
      }); 
     }).error(function (data) { 
      //Failed login, popup error message 
      var alertPopup = $ionicPopup.alert({ 
       title: 'Login Failed!', 
       template: 'Please check your credentials!' 
      }); 
     }); 
    } 
}) 

-Code für Tabs

.state('tab.details', { 
     cache: false, 
     url: '/details/:store_id/:invoice_id', 
     views: { 
     'tab-details': { 
      templateUrl: 'templates/tab-details.php', 
      controller: 'DetailsCtrl' 
     } 
    } 
}) 

-Code für Detail-Controller

.controller('DetailsController', function ($scope, $http, $state, $ionicPopup, $stateParams) { 
    $scope.token = localStorage.getItem("token"); 
    console.log($scope.token); 
    if ($scope.token == "logOut") { 
     $state.go('login'); 
     var alertPopup = $ionicPopup.alert({ 
      title: 'Login Required!', 
      template: 'Please login to access.' 
     }); 
    } 
    else { 
    } 
}) 

Antwort

0

$ scope ist jedem Controller relativ, es sei denn Login ein Elternteil Zustand $ scope ist kaskadiert nicht zu untergeordneten Zuständen. Sie müssen das Token in einem Dienst setzen, der von jedem Controller aus aufgerufen werden kann, oder Sie können es auf $ rootScope setzen, damit es überall verfügbar ist. Möchten Sie $ rootScope verwenden, ändern Sie $ scope.token in $ rootScope.token.

Verwandte Themen