简体   繁体   English

嵌入式ng-repeats与bootstrap崩溃,$ index和ng-init出现问题

[英]Nested ng-repeats with bootstrap collapse, trouble with $index and ng-init

I have a bootstrap collapse accordion with multiple ng-repeats: 我有一个带有多次重复重复的自举折叠手风琴:

<div class="subdiv-wrapper">
    <div class="panel-group" id="accordion1" ng-repeat="admin in subdivisions" ng-init="subdivIndex = $index">
        <div class="panel panel-default" ng-repeat="admin2 in admin.province">

            <div class="panel-heading">
                <h4 class="panel-title">
                    <a data-toggle="collapse" data-parent="#accordion1" href="#collapse-1{{subdivIndex}}"><span class="span-left">{{ admin2.name }}</span><span class="span-right">{{ admin2.population }}</span></a>
                </h4>
            </div>

            <div id="collapse-1{{subdivIndex}}" class="panel-collapse collapse">
                <div class="panel-body">
                  <h3>districts</h3>
                    <div class="panel-group" id="accordion2">

                        <!-- districts -->
                        <div class="panel panel-default" ng-repeat="admin3 in admin.district" ng-init="subdivIndex2 = $index">
                            <div class="panel-heading">
                                <h4 class="panel-title">
                                    <a data-toggle="collapse" data-parent="#accordion2" href="#collapse-1-1{{subdivIndex2}}"><span class="span-left">{{ admin3.name }}</span><span class="span-right">{{ admin3.population }}</span></a> 
                                </h4>
                            </div>
                            <!-- communes -->                           
                            <div id="collapse-1-1{{subdivIndex2}}" class="panel-collapse collapse">
                                <div class="panel-body">                                    
                                    <div ng-repeat="admin4 in admin3.commune"><span class="span-left">{{ admin4.name }}</span><span class="span-right">{{ admin4.population }}</span></div>
                                </div>
                            </div>
                        </div>                         
                    </div>
                </div>
            </div>
        </div>
    </div>

I have a nested array in my angular controller: 我的角度控制器中有一个嵌套数组:

 $scope.subdivisions = [
     //start province: adrar
     { "province": [{"name":"Adrar","population":"123"}], "district": [

        // district: adrar
        { "name":"Adrar","population":"123","commune":[
            {"name":"Adrar","population":"123"},
            {"name":"Bouda","population":"123"},
            {"name":"Ouled Ahmed Timmi","population":"123"}
        ]},
        // district: aoulef
        { "name":"Aoulef","population":"123","commune":[
            {"name":"Akabli","population":"123"},
            {"name":"Aoulef","population":"123"},
            {"name":"Timokten","population":"123"},
        ]},
        // district: aougrout
        { "name":"Aougrout","population":"123","commune":[
            {"name":"Aougrout","population":"123"},
            {"name":"Deldoul","population":"123"},
            {"name":"Metarfa","population":"123"}
        ]},

     ]}, //end province: adrar

      //start province: algiers
     { "province": [{"name":"Algiers","population":"123"}], "district": [

        // district: bab el oued
        { "name":"Bab El Oued","population":"123","commune":[
            {"name":"Bab El Oued","population":"123"},
            {"name":"Casbah","population":"123"},
            {"name":"Bains Romains","population":"123"}
        ]},
        // district: baraki
        { "name":"Baraki","population":"123","commune":[
            {"name":"Baraki","population":"123"},
            {"name":"Les Eucalyptus","population":"123"},
            {"name":"Sidi Moussa","population":"123"}
        ]},
        // district: Bir Mourad Raïs
        { "name":"Bir Mourad Raïs","population":"123","commune":[
            {"name":"Bir Mourad Raïs","population":"123"},
            {"name":"Hydra","population":"123"},
            {"name":"Saoula","population":"123"}
        ]},

     ]}, //end province: algiers

     ]; // end subdivisions 

My accordion has each province then each of that province's divisions and then each of the individual divisions' communes. 我的手风琴有每个省,然后是该省的每个部门,然后是每个部门的公社。

I'm trying to get each collapsible panel to open and close correctly. 我正在尝试让每个可折叠面板正确打开和关闭。 So I tried adding $index (and $parent.$index to the nested ng-repeat ) but that didn't work. 所以我尝试将$index (和$parent.$index到嵌套的ng-repeat但这不起作用。 Then I added 2 ng-init : 然后我添加了2 ng-init

  • First one - ng-init="subdivIndex = $index" 第一个 - ng-init="subdivIndex = $index"
  • Second one - ng-init="subdivIndex2 = $index" 第二个 - ng-init="subdivIndex2 = $index"

This is getting closer but still not working correctly (the first province opens and its nested divisions and communes and the second province opens but not its nested divions and communes). 这种情况越来越接近,但仍然没有正常工作(第一个省开放,其嵌套的部门和公社和第二个省开放,但不是它的嵌套部门和公社)。 How can I get all panels to open independently? 如何让所有面板独立打开?

I hope this makes sense - if not i'll make a plunker to demonstrate. 我希望这是有道理的 - 如果不是,我会做一个能够展示的人。

I found the solution: 我找到了解决方案:

<div class="subdiv-wrapper">
    <div class="panel-group" id="accordion1_{{subdivIndex}}" ng-repeat="admin in subdivisions" ng-init="subdivIndex = $index">
        <div class="panel panel-default" id="accordion1_{{subdivIndex}}" ng-repeat="admin2 in admin.province">

            <div class="panel-heading">
                <h4 class="panel-title">
                    <a data-toggle="collapse" data-parent="accordion1_{{subdivIndex}}" href="#collapse-1{{subdivIndex}}" aria-expanded="false" class="collapsed"><span class="span-left">{{ admin2.name }}</span><span class="span-right">{{ admin2.population }}</span></a>
                </h4>
            </div>

            <div id="collapse-1{{subdivIndex}}" class="panel-collapse collapse">
                <div class="panel-body">
                  <h3>districts</h3>
                    <div class="panel-group" id="accordion2_{{subdivIndex}}_{{subdivIndex2}}">

                        <!-- districts -->
                        <div class="panel panel-default" ng-repeat="admin3 in admin.district" ng-init="subdivIndex2 = $index">
                            <div class="panel-heading">
                                <h4 class="panel-title">
                                    <a data-toggle="collapse" data-parent="#accordion2_{{subdivIndex}}_{{subdivIndex2}}" href="#collapse-1-1_{{subdivIndex}}_{{subdivIndex2}}"><span class="span-left">{{ admin3.name }}</span><span class="span-right">{{ admin3.population }}</span></a> 
                                </h4>
                            </div>
                            <!-- communes -->                           
                            <div id="collapse-1-1_{{subdivIndex}}_{{subdivIndex2}}" class="panel-collapse collapse">
                                <div class="panel-body">
                                    <!-- display 'communes' title here -->
                                    <div ng-repeat="admin4 in admin3.commune"><span class="span-left">{{ admin4.name }}</span><span class="span-right">{{ admin4.population }}</span></div>
                                </div>
                            </div>
                        </div>                         
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

Now I'm just trying to figure out how to get all panels to close when another one is opened... 现在我只想弄清楚当另一个面板打开时如何关闭所有面板......

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM