我有一个角度应用程序,我想隐藏一个‘包含的视图’,如果主视图是主页视图。
<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>
发布于 2014-03-12 07:53:07
只需将ng-show与否定表达式一起使用:
<div id=includedView ng-view="included" ng-show="location != '/main'"></div>
您必须在控制器中的控制器$scope
上设置location
的值;可以使用$route
或$location
提供程序。
发布于 2014-03-12 08:01:32
如果您使用路由,则可以在routeprovider的resolve
块中对每个路由更改运行一些逻辑。
在下面的示例中,我使用了一个存储位置并在$rootScope上广播事件的自定义SystemService服务。在此示例中,导航位于路由控制器管理的视图之外,并具有自己的控制器:
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注入到控制器中,并基于此设置可见性。
https://stackoverflow.com/questions/22338743
复制相似问题