我使用的是uibAccordion,如果我单击第一个重复的元素,所有其他元素也会打开,切换不会正常发生。下面是代码。
<ul>
<li ng-repeat="(key, value) in scenariosViewAll.collectionBookObject">
<div class="desc">
<uib-accordion close-others="true" class="">
<div uib-accordion-group id="{{$index+1}}" class="panel-default" is-open="status.open" is-disabled="true" prevent-click="false" ng-init="status.open = (key == scenariosViewAll.shared.currentSelectedAccordion) ? true : false" ng-class="{'opened': status.open}" ng-if="value.length > 0">
<uib-accordion-heading>
<span class="accordion-toggle-wrapper">
<span class="accordion-title">
{{key}}
</span>
<span class="pull-right acc-icon-set">
<span class="collection-indicator">{{value.length}}</span>
<span class="arrow-toggle">
<button class="btn btn-icon" aria-hidden="true" ng-click="status.open = !status.open;">
<i class="icon" ng-class="{'icon-chevron-up': status.open, 'icon-chevron-down': !status.open}"></i>
</button>
</span>
</span>
</span>
</uib-accordion-heading>
</div>
</uib-accordion>
</div>
</li>
</ul>我尝试将id作为{{index+1}}和close-others="true"进行传递。但它不起作用
发布于 2017-12-19 17:52:52
这里
ng-init="status.open = (key == scenariosViewAll.shared.currentSelectedAccordion) ? true : false"我真的不知道您将status.open绑定到什么,但很明显这是错误的,并且非常含糊
对其进行简化,并为is-open提供一个属性,该属性为每个迭代的键/值引用不同的值,例如
ng-init="value.ui.isOpen = false;"
is-open="value.ui.isOpen"如果您非常懒惰,并且不需要访问控制器中的这些变量,那么就不要将它绑定到任何东西上
ng-init="isOpen = false;" // by now this is redundant and can be removed
is-open="isOpen"这是可行的,因为ngRepeat为每次迭代创建了一个新的作用域,因此将为每个这样的作用域创建一个新的isOpen。
发布于 2017-12-19 19:12:12
我通过传递index得到了解决方案:
<div uib-accordion-group class="panel-default" ng-init="status.open = false;" is-open="status.open[$index]" prevent-click="false" ng-class="{'opened': status.open}" ng-if="value.length > 0">https://stackoverflow.com/questions/47883623
复制相似问题