You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nativescript/Angular:点击ngFor列表项仅展开对应详情的方法

解决NativeScript GridLayout手风琴列表仅展开点击项的问题

这个问题很常见——你现在用了一个全局的showDetails布尔变量来控制所有项的展开/隐藏,所以点击任何一项都会触发全局状态的切换,导致所有详情都跟着显示或隐藏。咱们可以通过给每个项单独维护展开状态来解决这个问题,具体修改步骤如下:

1. 替换全局状态变量

把组件里的单个showDetails布尔值,改成一个用于记录每个项展开状态的对象:

// 初始化一个空对象,用来存储每个Gerätegröße ID的展开状态
expandedItems = {};

2. 更新collapseInfo函数

修改函数逻辑,不再切换全局变量,而是针对点击项的ID单独切换状态:

collapseInfo(geraetegroesseID) {
  console.log("Gerätegröße: " + geraetegroesseID);
  // 切换对应ID的展开状态,如果该ID还没记录状态,默认设为true(展开)
  this.expandedItems[geraetegroesseID] = !this.expandedItems[geraetegroesseID];
}

3. 修改模板中的显示条件

把*ngIf的判断条件从全局的showDetails,改成检查当前项ID在expandedItems中的状态:

<ng-container *ngFor="let g of geraetegroessen; let i=index">
  <GridLayout rows="auto, auto">
    <Label row="0" text="{{g.geraetegroesse}}" class="geraetegroessen" (tap)="collapseInfo(g.geraetegroesseID)"></Label>
    <ng-template [ngIf]="expandedItems[g.geraetegroesseID]">
      <Label row="1" text="Hello" class="geraetegroesseninfos"></Label>
    </ng-template>
  </GridLayout>
</ng-container>

这样修改后,每个项的展开状态都是独立管理的,点击某一项时只会切换对应ID的状态,也就只会展开/隐藏该项的详情内容了。

内容的提问来源于stack exchange,提问作者Ferhat Koca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 13:17:29