代码之家  ›  专栏  ›  技术社区  ›  bluePearl

NGF中的下拉列表,仅显示第一个列表项

  •  0
  • bluePearl  · 技术社区  · 6 年前

    我正在开发一个侧菜单,它将显示一个项目列表,所有项目旁边都有一个复选框,当复选框被选中时---雪佛龙图标将被启用,允许用户显示该选中项目的下拉列表。

    我当前的问题是,每当我单击图标以展开选中项目的下拉列表时…它只展开列表中第一个项目的下拉列表。它似乎不显示每个选定项目的下拉列表。

    这是我的HTML代码:

    <ul>
      <li>
        <div class="col-md-4">
          <div class="checkbox" *ngFor="let item of list">
            <div class="content-col">
    
              <label>
                 <input type="checkbox" (click)="action(item, $event);" [checked]="item.checked">
                 <span class="text-body">{{item.title}}</span>
              </label>
    
              <button [disabled]="!item.checked" data-toggle="collapse" data-collapse-icon="ChevronDown" data-expand-icon="ChevronUp" aria-expanded="false" aria-controls="listCollapse" href="#listCollapse">
                                <i class="win-icon"></i>
               </button>
               
            </div>
            
            <ul class="collapse" id="listCollapse">
              <li routerLinkActive="active" [routerLinkActiveOptions]="{exact: true}">
                <a role="menuitem" [routerLink]="[...]">DD 1</a>
              </li>
              <li routerLinkActive="active">
                <a [routerLink]="[...]" role="menuitem">DD 2</a>
              </li>
            </ul>
          </div>
        </div>
      </li>
    </ul>

    我如何才能使这项工作,以便在单击for循环中的展开图标时,为每个列表项显示折叠的下拉列表?

    从视觉上看,我的列表如下:

    [X]项目1^
    DD A
    DD B
    [X]项目2(向下V形)
    [X]项目3(向下V形)

    单击项目1、2或3的V形符号-它只展开项目1的下拉列表。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Sanju    6 年前

    您使用的ID“listclapse”将出现问题。因为使用ngfor生成的所有列表项都将具有相同的ID。因此每当触发时,第一个具有ID“listclapse”的元素都将打开。

        2
  •  1
  •   Rak2018    6 年前

    你可以这样做。

    HTML

    <ul>
      <li>
        <div class="col-md-4">
          <div class="checkbox" *ngFor="let item of list; let i = index">
            <div class="content-col">
    
              <label>
                <input type="checkbox" (click)="updateItem(item, $event);" [checked]="item.checked">
                <span class="text-body">{{item.title}}</span>
              </label>
    
              <a data-toggle="collapse" data-collapse-icon="ChevronDown" *ngIf="item.checked == true" data-expand-icon="fa fa-chevron-up" aria-expanded="false" href="#listCollapse{{i}}">
                <button>
                  <i class="fa fa-plus"></i>
                </button>
              </a>
    
              <a data-toggle="collapse" data-collapse-icon="ChevronDown" *ngIf="item.checked == false" data-expand-icon="fa fa-chevron-up" aria-expanded="false" href="null">
                <button [disabled] ="!item.checked" >
                  <i class="fa fa-plus"></i>
                </button>
              </a>
    
            </div>
    
            <div class="collapse" id="listCollapse{{i}}">
              <div routerLinkActive="active" [routerLinkActiveOptions]="{exact: true}">
                <a role="menuitem">DD 1</a>
              </div>
              <div routerLinkActive="active">
                <a role="menuitem">DD 2</a>
              </div>
            </div>
          </div>
        </div>
      </li>
    </ul>
    

    TS

    export class AppComponent {
    
    list: any =
        [{
          'id': 1,
          'title': 'first',
          'checked': false
        },
        {
          'id': 1,
          'title': 'second',
          'checked': false
        }];
    
     updateItem(item: any,evento: any) {
    
        item.checked = !item.checked
    
      }
    
    }
    

    enter image description here