首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Uib折叠按钮切换问题

Uib折叠按钮切换问题
EN

Stack Overflow用户
提问于 2017-12-19 17:21:53
回答 2查看 617关注 0票数 0

我使用的是uibAccordion,如果我单击第一个重复的元素,所有其他元素也会打开,切换不会正常发生。下面是代码。

代码语言:javascript
复制
<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"进行传递。但它不起作用

EN

回答 2

Stack Overflow用户

发布于 2017-12-19 17:52:52

这里

代码语言:javascript
复制
ng-init="status.open = (key == scenariosViewAll.shared.currentSelectedAccordion) ? true : false"

我真的不知道您将status.open绑定到什么,但很明显这是错误的,并且非常含糊

对其进行简化,并为is-open提供一个属性,该属性为每个迭代的键/值引用不同的值,例如

代码语言:javascript
复制
ng-init="value.ui.isOpen = false;"
is-open="value.ui.isOpen"

如果您非常懒惰,并且不需要访问控制器中的这些变量,那么就不要将它绑定到任何东西上

代码语言:javascript
复制
ng-init="isOpen = false;" // by now this is redundant and can be removed
is-open="isOpen"

这是可行的,因为ngRepeat为每次迭代创建了一个新的作用域,因此将为每个这样的作用域创建一个新的isOpen

票数 0
EN

Stack Overflow用户

发布于 2017-12-19 19:12:12

我通过传递index得到了解决方案:

代码语言:javascript
复制
  <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">
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47883623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档