AngularJs:在不同的控制器之间设置“ng-show”true / false

时间:2015-01-16 06:48:21

标签: html angularjs angularjs-directive angularjs-scope angular-ui-router

我对angularjs很新,我面临的问题如下:

我有一个导航栏。由控制器控制" navController"并且它链接到"#/ login"和"#/ userregister"。我的导航栏是静态的。 我的ui-view指令在我的导航栏下面:如图所示



<nav ng-controller='navController'>
    <a class="navbar-brand" href="/">First Angular Site</a>
    <a  class='label' href='#/userregister' ng-show="true" >Click Here to Register</a>
    <a   class='label 'href ='#/login' ng-show="true">Click Here To Login</a>
 </nav>

<ui-view>
  
</ui-view>
&#13;
&#13;
&#13;

我希望在状态发生变化时隐藏这两个链接,即我登录时。

我无法想象如何隐藏它们......因为我的控制器不同而导航条是静态的。

可能的脑风暴解决方案我认为会起作用。

1)在我的ng-show =&#34; somefunction()&#34;中使用一个函数。设置它是真是假。 在我使用工厂的控制器之间共享数据,但由于工厂只启动了一次。我不得不放弃这个想法。

2)使用UI-Router的Reslove设置变量True或False。 但由于我的导航栏未包含在(ui-view)指令中。我不得不放弃这个想法。

还有什么方法可以让我做我想做的事。 (即在状态改变后隐藏两个链接)

编辑:

&#13;
&#13;
app.controller ('simpleController',function($scope ,$http, $location, tokenfactory,loginusercheck, usernamefactory){
//various stuff

}

                
                
&#13;
&#13;
&#13;

这是我的ui-view指令。

这是我的导航栏控制器。

&#13;
&#13;
app.controller ('navController',function($scope,$location,tokenfactory,loginusercheck,usernamefactory ,$window){
  // sign out function defined only here
  }
&#13;
&#13;
&#13;

这是我的.config

&#13;
&#13;
app.config (function ($stateProvider,$urlRouterProvider){
    $stateProvider
      .state('hello',
      {
        url: '/userregister',
        templateUrl: 'partials/view.html',
        controller: 'simpleController',
      })
      .state('listview',
        {
            url:'/list',
            templateUrl:'partials/list.html',
            controller:'newController'
           
            
        })
      .state('login',
        {
            url:'/login',
            templateUrl:'partials/login.html',
            controller: 'simpleController',
           
      })
      .state('index',{
            url:'/',
            templeUrl:'basic.html',
            controller:'simpleController'
        
        
      })
        .state('home',{
            url:'/home',
            templateUrl:'/partials/home.html',
            controller:'simpleController',

       }
            
            })
      $urlRouterProvider.otherwise('/')
    });
&#13;
&#13;
&#13;

我只需要以某种方式隐藏这两个链接。我不认为控制器代码是必需的,但我仍然在发帖。

1 个答案:

答案 0 :(得分:1)

将$ state注入您的navbars控制器并将$ state对象添加到您的范围,如下所示:

app.controller ('navController',function($scope, $state){
     $scope.$state = $state;
  }

然后对于您希望在登录时隐藏的<a>元素,请使用:

<a ng-show="$state.includes('login')"/>

这意味着只有您处于“登录”状态时才会显示这些链接。