有一个角度应用程序,我想隐藏其中一个“包含的视图”。
<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>
答案 0 :(得分:21)
您可以将$route
或$location
注入您的控制器,从其中一项服务中获取所需的值,并在ng-show
或ng-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>
答案 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,并根据该位置设置可见性。