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

Angular中选择特定选项时按行显示文本框的实现问题

解决Angular表格行下拉框与文本框对应显示的问题

你当前的问题根源在于用了全局的selectedType变量,所有行的文本框都绑定这个变量,导致只要任意一行选中"random value",所有行的文本框都会同步显示。要实现每行独立控制,得给每行的数据单独存储选中状态,具体修改如下:

1. 给每行数据添加独立的选中状态属性

在获取到产品数据后,遍历给每个product对象添加selectedOption属性,用来存储当前行的下拉选中值:

// 假设你的产品数据数组是products,在初始化或获取数据后执行
this.products.forEach(product => {
  product.selectedOption = ''; // 初始化为空值
});

2. 修改模板代码,绑定每行的选中状态

把下拉框的选中值绑定到当前行product的selectedOption,文本框的显示条件也改为判断当前行的这个属性:

<ng-template pTemplate="body" let-product>
    <tr>
        <td>{{ product.ColumnName }}</td>
        <td>{{ product.DataType }}</td>
        <td>{{ product.NullCount }}</td>
        <td>{{ product.percentage }}</td>
        <td>
            <!-- 用双向绑定[(ngModel)]直接绑定当前行的选中状态 -->
            <select name="" id="" class="form-control" [(ngModel)]="product.selectedOption">
                <option value="" *ngFor="let option of getOptions(product.DataType)">{{option}}</option>
            </select>
            <br/>
            <!-- 只判断当前行的selectedOption -->
            <input type="text" *ngIf="product.selectedOption === 'random value'" >
        </td>
    </tr>
</ng-template>

可选:不用双向绑定的写法

如果不想使用ngModel,可以通过change事件传递当前行对象来更新状态:

模板修改

<select name="" id="" class="form-control" 
        (change)="onChange($event, product)"
        [value]="product.selectedOption">
    <option value="" *ngFor="let option of getOptions(product.DataType)">{{option}}</option>
</select>

组件方法修改

onChange(event: any, product: any) {
  product.selectedOption = event.target.value;
}

这样修改后,每个表格行的下拉选中状态都独立存储在自身的product对象中,只有选中"random value"的那一行才会显示对应的文本框,其他行不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:03:31