我正在开发带有离子框架的移动应用程序。它有一个带有以下链接的侧边菜单
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
,但我仍然遇到菜单缺失问题:(
注意:我使用的是离子标签模板
答案 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;
}
});