我在根模板<div ui-view=""></div>
中定义了ui-view。如果该内容为空,是否可以自动隐藏该视图?
我正在寻找类似的线程一段时间,但所有人建议检查当前路线或将vars传递给rootScope我不喜欢。我正在寻找最简单的解决方案 - 检查所需的视图是否有任何内容定义,如果没有 - 隐藏它的div(或任何其他html标记)
答案 0 :(得分:5)
我想展示或分享 - 我的方式如何解决这个问题。如果我仔细阅读这个问题,我会说这是一个类似的故事。否则,请将其作为提示......
情景:我们需要一个地方,如果需要,我们可以在那里展示一些东西。并隐藏,如果......不需要。我们将其称为工具栏,并假设它在根状态下被定义为View
,并且旨在由任何子状态/控制器管理....
$stateProvider
.state('myModule', {
url: "/mm", // sub root 'mm' like MyModule
views: {
'body@': { // this way we inject into index.html
templateUrl: .. // the MyModule root template
controller: 'RootCtrl', // the root controller
},
'toolbarView@myModule' : { // the view is part of MyModule template
templateUrl: ..
controller: ..
},
... // standard defintions of the root state
...
这里的本质是默认情况下应该呈现 View 。可见性将由该视图管理:
true
?事实上它会非常简单。在我们的根控制器RootCtrl
中,我们可以/必须为我们的 Model
视图声明toolbar
:
// inside of the 'RootCtrl'
$scope.ToolbarModel = {
IsVisible : false,
ViewUrl : null,
};
$scope.ToolbarModel.close = function(){
this.ViewUrl : null;
this.IsVisible = false;
}
这可能是我们的 Toolbar
查看:
// toolbar class can position this view from the global perspective
<div class="toolbar"
ng-show="ToolbarModel.IsVisible" >
// the view is managing its visiblity by Model values
<button class="btn btn-default btn-xs"
ng-click="ToolbarModel.close()"
// anyone can anywhere hide us
</button>
// holder class representing some inner scrolling area...
<div class="holder"
ng-include="ToolbarModel.ViewUrl" >
// this way we inject the passed 'ViewUrl'
</div>
</div>
就是这样。 ng included 视图可以包含需要$state
,$stateParams
的控制器的指令......并且做了很多。
我在这里看到的好处:
IsVisible
=== false
。ToolbarModel.close()
close()
......如果不需要就不会打扰angular
和ui-router
功能创建任何扩展程序,只使用可用的内容最后回答一个问题:
如果该内容为空,是否可以自动隐藏该视图?
是的,我们可以在任何地方管理$scope.ToolbarModel.IsVisible
。
(注意:如果需要,这就是为什么每个孩子都可以使用该模型What are the nuances of scope prototypal / prototypical inheritance in AngularJS?)
答案 1 :(得分:4)
我意识到这是一个古老的问题,但还有另一种方法可以用CSS做到这一点。
您可以使用:empty选择器检查内容并以此方式隐藏ui-view div。