当过滤数组不为空时,以编程方式打开由嵌套Ng重复生成的Bootstrap UI手风琴

时间:2015-03-13 19:19:55

标签: angularjs angular-ui-bootstrap

我有一个Bootstrap-UI手风琴组,使用ng-repeat生成单独的手风琴菜单。每个手风琴下的内容也使用嵌套的ng-repeat生成。

<accordion close-others="false">
        <span data-ng-repeat="category in categories">
            <accordion-group is-open="filterText.length > 0">
                <accordion-heading>{{category}}: {{reportList.length}} Items </accordion-heading>
                <div>
                    <ul>
                        <li data-ng-repeat="report in reportList = (getReports($parent.$index) | filter: filterText)">{{report}}</li>
                    </ul>
                </div>
            </accordion-group>
        </span>
    </accordion>

第二次重复重复生成的内容需要是可搜索的。执行搜索时,应打开包含匹配值的手风琴并显示匹配值。我知道外部ng-repeat看到过滤后的数组及其长度,因为我可以在视图中显示长度值(即过滤器执行时{{reportList.length}}更新)。

当我尝试将reportList.length值放在is-open的{​​{1}}属性中时出现问题。使用<accordion-group>似乎将文字传递给指令。无奈之下,我尝试使用is-open="reportList.length",但这会引发预期的语法错误。

这是一个plunker,它显示了我所做的工作,并注释出了一些显示我认为它应该工作的方式(第22行和第23行)。任何建议都非常受欢迎。

2 个答案:

答案 0 :(得分:1)

您的绑定在ng-repeat内打开,为每个项目(类别)创建子范围。您需要绑定到$ parent.filterText.length,因为filterText不是类别属性。

答案 1 :(得分:0)

绑定is-open的内容,Angular需要能够分配给它,而不仅仅是评估它。它可以评估像&#34; foo == 5&#34;但它不能指定

我所做的是创建一个变量并绑定到该变量,然后手风琴可以改变它,我可以改变它,每个人都快乐。

$scope.accordionSettings = {
IsOpen: {
    Section1: true,
    Section2: false
}};

在标记中:

<div uib-accordion-group is-open="accordionSettings.IsOpen.Section1">
   ...  more markup ...
<div uib-accordion-group is-open="accordionSettings.IsOpen.Section2">