如何根据我当前所在的页面/路线使用角度ng-hide?

时间:2014-03-11 23:18:00

标签: javascript angularjs ng-show ng-hide

如果主视图是主页视图,

有一个角度应用程序,我想隐藏其中一个“包含的视图”。

<div id="page" ng-class="{ showNav: $root.showNav }">
    <header id="pageHeader" ng-controller="HeaderCtrl" data-ng-include="'views/includes/header.html'"></header>
    <div id="pageHero" ng-show='$rootScope.fullView' ng-controller="MainsearchCtrl" data-ng-include="'views/mainSearch.html'"></div>
    <div id="pageContent" ng-view=""></div>
</div>

3 个答案:

答案 0 :(得分:21)

您可以将$route$location注入您的控制器,从其中一项服务中获取所需的值,并在ng-showng-if中使用。

使用$route$location的示例,您可以看到here

以下是一种可能的方法:

<强>的JavaScript

angular.module('app', ['ngRoute']).
  config(['$routeProvider', function($routeProvider) {
    $routeProvider.
      when('/one', {
        controller: 'routeController',
        templateUrl: 'routeTemplate.html'
      }).
      when('/two', {
        controller: 'routeController',
        templateUrl: 'routeTemplate.html'
      }).
      otherwise({
        redirectTo: '/one'
      })
  }]).
  controller('routeController', ['$scope', '$location', function($scope, $location) {
    $scope.showPageHero = $location.path() === '/one';
  }]);

<强> routeTemplate.html

<div>
  <h1>Route Template</h1>
  <div ng-include="'hero.html'" ng-if="showPageHero"></div>
  <div ng-include="'content.html'"></div>
</div>

Plunker:http://plnkr.co/edit/sZlZaz3LQILJcCywB1EB?p=preview

答案 1 :(得分:5)

只需使用带有否定表达式的ng-show:

<div id=includedView ng-view="included" ng-show="location != '/main'"></div>

您必须在控制器的控制器location上设置$scope的值;可能使用$route$location个提供商。

答案 2 :(得分:2)

如果使用路由,则可以在routeprovider中的resolve块中的每个路由更改上运行一些逻辑。

在下面的示例中,我使用自定义SystemService服务来存储位置,然后在$ rootScope上广播一个事件。在此示例中,导航位于由路由控制器管理的视图之外,并且具有自己的控制器:

app.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider.
      when('/', {
      templateUrl: 'partials/welcome.html',
      controller: 'WelcomeCtrl',
      resolve: {
        load: function(SystemService){            
          SystemService.fireNavEvent({showNav:false,location:'/'});            
        }
      }
    }).
    when('/other', {
      templateUrl: 'partials/other.html',
      controller: 'ElseCtrl',
      resolve: {
        load: function(SystemService){            
          SystemService.fireNavEvent({showNav:true,location:'/other'});            
        }
      }
    }).
    otherwise({
      redirectTo: '/'
  });
}]);

//在SystemServce中:

function fireNavEvent(obj){
    this.showNav = obj.showNav;
    $rootScope.$broadcast('navEvent',obj);
}

//然后在导航控制器中:

$scope.$on("navEvent", function(evt,args){
  $scope.showNav = SystemService.showNav;
  // also some logic to set the active nav item based on location
});

还有其他方法可以实现这一点,例如,您可以直接从路由配置广播$rootScope上的导航更改。

您还可以在控制器中注入$ location,并根据该位置设置可见性。