混合离子移动应用程序:成功登录后隐藏登录屏幕

时间:2016-05-18 06:28:12

标签: android html cordova ionic-framework

我正在开发带有离子框架的移动应用程序。它有一个带有以下链接的侧边菜单

1.Home

1.登陆

2。关于

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>

它在登录后显示的问题并没有显示个人资料链接,但是当我刷新整个页面时,它会像我预期的那样工作 如何解决这个问题?

更新

我通过重新加载状态解决了这个问题

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

但我会收到另一个错误,我的user_profilepage缺少侧边菜单 我在enable-menu-with-back-views="true"中添加了此menu.html,但我仍然遇到菜单缺失问题:(

注意:我使用的是离子标签模板

1 个答案:

答案 0 :(得分:0)

尝试使用$ apply包装您的作业,如下所示:

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

如果你说一个摘要已经在运行时出错,请换掉$ scope。$ apply with $ timeout,这是你需要注入的服务。如果您没有指定特定的延迟,那么会将更新推迟到下一个摘要。

首先将它作为参数添加到控制器中:

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

然后,从上一个列表中替换$ scope。$ apply:

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