2016-11-08 113 views
0

我正在开发应用程序。当我打开应用程序时,我直接进入访问者可以检查我的产品的页面。此时,vistor无法看到菜单按钮,因为他没有登录(ng-hide =“!user.loggedIn”)。AngularJS + Ionic - 如何在隐藏参数更改时取消隐藏按钮

变量user.loggedIn在此页面控制器中处理,我在此设置value = localStorage上的标志,如下所示。

当他选择他要购买的产品时,我带他去注册/登录,然后让他访问所有页面的菜单。

但是,当我转到菜单设置为隐藏(ng-hide)的页面时,即使localStorage上的标记更改值,菜单也会隐藏。

我需要的是“刷新”控制器$范围和按钮参数,以使其取消隐藏。我怎样才能做到这一点?

谢谢!

HTML

<ion-view view-title="Novo Pedido">  
    <ion-nav-bar class="bar-comprador"> 
     <ion-nav-buttons side="left"> 
      <button class="button button-icon button-comprador ion-navicon" 
        menu-toggle="left" ng-hide="!user.loggedIn"></button> 
     </ion-nav-buttons> 
    </ion-nav-bar> 
... 

CONTROLLER 
     $scope.user = []; 
     $scope.user.loggedIn= 0; 
     $scope.user.loggedIn= localStorage.getItem('loggedIn'); 

     $ionicSideMenuDelegate.canDragContent($scope.user.loggedIn); 
+0

你在$ scope.user.loggedIn的用户登录后获得价值?我在想什么是你不能在更新后从本地存储中获取值 –

回答

0

我怀疑这可能是因为离子高速缓存的观点。你可以使用各种离子视图事件来实现你想要的。例如

$scope.$on('$ionicView.beforeEnter', function(){ 
     $scope.user = []; 
     $scope.user.loggedIn= 0; 
     $scope.user.loggedIn= localStorage.getItem('loggedIn'); 

     $ionicSideMenuDelegate.canDragContent($scope.user.loggedIn); 
}); 

这会在用户每次进入视图时运行。

有时,在摘要循环中更新模型时,角度无法更新dom。如果以上操作不解决,你可以尝试

$timeout(function(){ 
    $scope.user = []; 
    $scope.user.loggedIn= 0; 
    $scope.user.loggedIn= localStorage.getItem('loggedIn'); 
    $ionicSideMenuDelegate.canDragContent($scope.user.loggedIn); 

}); 

您可以结合两者

+0

$ scope。$ on working fine!谢谢! –

0

我会建议两件事情:一个 。在更新变量时添加控制台日志。 为EXE:

 $scope.user = []; 
    $scope.user.loggedIn= 0; 
    $scope.user.loggedIn= localStorage.getItem('loggedIn'); 
    console.log($scope.user.loggedIn); 

将打印您的控制台上的价值,你就会知道,如果你是获取正确的值。 b。如果该值存在,那么在更新值后尝试添加以下行。

$scope.user = []; 
    $scope.user.loggedIn= 0; 
    $scope.user.loggedIn= localStorage.getItem('loggedIn'); 
    $scope.$apply(); 

上述语句将为您刷新视图。

+0

谢谢!我会检查出来的! –