我手风琴上有“雪佛龙”图标,点击后切换为指向上或下,这是通过ng-click
和ng-class
完成的。手风琴只允许一个面板同时打开 - 所以当我点击一个关闭的面板时,打开的面板关闭。但是,如何在打开的面板上切换用ng-click
关闭的V形图标?
最初我可以用DOM操作等来做,但由于这是角度的局部视图我不能这样做。
代码:
<div class="panel-group" id="accordion">
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseOne" ng-click="firstpaneisopen=!firstpaneisopen">
<i class="glyphicon" ng-class="{'glyphicon-chevron-up': firstpaneisopen, 'glyphicon-chevron-down': !firstpaneisopen}"></i> Collapsible Group Item #1
</a>
</h4>
</div>
<div id="collapseOne" class="panel-collapse collapse in">
<div class="panel-body">
Body
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" ng-click="secondpaneisopen=!secondpaneisopen>
<i class="glyphicon" ng-class="{'glyphicon-chevron-up': secondpaneisopen, 'glyphicon-chevron-down': !secondpaneisopen}"></i> Collapsible Group Item #2
</a>
</h4>
</div>
<div id="collapseTwo" class="panel-collapse collapse">
<div class="panel-body">
Body
</div>
</div>
</div>
</div>
答案 0 :(得分:3)
我建议您查看&#39; UI Bootstrap&#39;来自AngularUI团队。它是用纯AngularJS&#34;编写的&#34; Bootstrap组件的集合。
http://angular-ui.github.io/bootstrap/
他们的网站上有一个示例,显示他们的Accordion指令使用ng-class
来切换V形图标。
http://angular-ui.github.io/bootstrap/#/accordion
他们的指令还具有close-others
属性,如果该属性为真,则确保在任何时候只打开一个面板。
<accordion close-others="true">
答案 1 :(得分:3)
这是我尝试过的,似乎有效
在我的控制器中我有
$scope.menuStatus = [ { isOpen : true },
{ isOpen : false },
{ isOpen : false } ]
在我的HTML中我有
<accordion id='cntLeftMenu' close-others='false'>
<accordion-group is-open='menuStatus[0].isOpen'>
<accordion-heading class='menu-title'>
Cars <i class="pull-right glyphicon" ng-class="{'glyphicon-chevron-down': menuStatus[0].isOpen , 'glyphicon-chevron-right': !menuStatus[0].isOpen }"></i>
</accordion-heading>
<ul class='left-menu'>
<li><a href=''>test1</a></li>
<li><a href=''>test1</a></li>
<li><a href=''>test1</a></li>
</ul>
</accordion-group>
<accordion-group is-open='menuStatus[1].isOpen'>
<accordion-heading class='menu-title'>
Customers <i class="pull-right glyphicon" ng-class="{'glyphicon-chevron-down': menuStatus[1].isOpen , 'glyphicon-chevron-right': !menuStatus[1].isOpen }"></i>
</accordion-heading>
<ul class='left-menu'>
<li><a href=''>test1</a></li>
<li><a href=''>test1</a></li>
<li><a href=''>test1</a></li>
</ul>
</accordion-group>
<accordion-group is-open='menuStatus[2].isOpen'>
<accordion-heading class='menu-title'>
Staff <i class="pull-right glyphicon" ng-class="{'glyphicon-chevron-down': menuStatus[2].isOpen , 'glyphicon-chevron-right': !menuStatus[2].isOpen }"></i>
</accordion-heading>
<ul class='left-menu'>
<li><a href=''>test1</a></li>
<li><a href=''>test1</a></li>
<li><a href=''>test1</a></li>
</ul>
</accordion-group>
<accordion>
答案 2 :(得分:3)
如何使用CSS? Bootstrap在collapsed
元素上添加了html
个类data-toggle="collapse"
。幻灯片打开后,它将删除此collapsed
课程。然后,我们可以使用css
来轮换span
元素(具有data-toggle
属性的元素的子元素)。
<style>
button.collapsed span {
transform: rotate(-90deg);
}
</style>
<button type="button" class="btn btn-info collapsed" data-toggle="collapse" data-target="#demo">
Simple collapsible
<span class="glyphicon glyphicon-chevron-down"></span>
</button>
<div id="demo" class="collapse">
Lorem ipsum dolor...
</div>
重要提示:确保 collapsed
类添加到具有data-toggle="collapse"
属性的元素中,以便顺利运行。否则,在初始加载元素时,span
元素在第一次没有按预期旋转。
答案 3 :(得分:2)
进行了一些调查,我可以使用this method将open
类添加到panel-header
,当它切换为打开时。这个示例允许打开多个面板并使用Angular Strap Collapse。
模板:
<div class="panel-group"
role="tablist"
data-ng-model="multiplePanels.activePanels"
data-allow-multiple="true"
data-bs-collapse>
<div class="panel panel-default" ng-repeat="location in locations">
<div class="panel-heading"
role="tab"
data-ng-class="{'open' : multiplePanels.activePanels.indexOf($index) > -1}"
bs-collapse-toggle>
<h3>Some Header Stuff</h3>
</div>
<div class="panel-collapse" role="tabpanel" bs-collapse-target>
<div class="panel-body">
<p>Stuff in the panel body...</p>
</div>
</div>
</div>
</div>
控制器中的JS:
$scope.multiplePanels.activePanels = [];
答案 4 :(得分:2)
我想过的最简单的解决方案。而不是使用任何控制器,
<div
class="fa fa-fw list-arrow"
ng-class="{'fa-angle-down': isClicked, 'fa-angle-right' : !isClicked}"
ng-click="isClicked = !isClicked">
</div>
你可以像我一样写作。
答案 5 :(得分:1)
您可以使用bootstrap(经过4+测试)折叠和以下样式来切换按钮;
<style>
[id^='particon'] {
display: block !important;
}
[id^='particon']:after {
font-family: 'Glyphicons Halflings';
color: grey;
}
[id^='particon'].collapse:after {
content: "\e081";
}
[id^='particon'].collapse.show:after {
content: "\e082";
}
/*optional*/
[id^='particon'].collapsing {
transition: none;
}
</style>
适用于完整的摘要;
答案 6 :(得分:0)
经过一些研究,我有一种解决方法。
JS:
$scope.firstpaneisopen = false;
$scope.secondpaneisopen = false;
在第一个窗格上修改了ng-click:
<a data-toggle="collapse" data-parent="#accordion" href="#collapseOne" ng-click="firstpaneisopen=!firstpaneisopen; secondpaneisopen=false">
在第二个窗格上反之亦然。
我认为这不是一个优雅的解决方案,特别是如果我们有两个以上的窗格,但它确实有效。