模板驱动形式的单选按钮

问题描述 投票:0回答:2

每次页面加载时总是选中最后一个单选按钮。我知道它与ID有关,但我不知道如何解决。

countryArray

countryA = [{name : "Finland"}, {name : "china"},{name :  "USA"}]

test.html

            <form #filterForm="ngForm" (ngSubmit)="addFilter(filterForm)" autocomplete="off">
                <div class="row">
                    <div class="col-12" style="border: 1px solid red">
                        <div *ngFor="let x of country">
                            <label for="{{x.name}}"> {{x.name}} </label>
                            <input type="radio" id="{{x.name}}" value="{{x.name}}" name="countries" [(ngModel)]='x.name' >
                        </div>
                    </div>
                    <!-- <div class="col-12" style="border: 1px solid red">b</div>
                    <div class="col-12" style="border: 1px solid red">c</div>
                    <div class="col-12" style="border: 1px solid red">D</div> -->
                </div>
            </form>
            hh : {{filterForm.value | json}}
javascript angular typescript angular7 ngfor
2个回答
1
投票

您应该向每个国家/地区添加一个选定的属性,以用作ngModel作为单选按钮的值:

在构造函数中:

this.country = this.country.map(item =>({ name: item.name , selected : false }));

使用html:

<div class="col-12" style="border: 1px solid red">
    <div *ngFor="let x of country; index as i">
        <label for="{{x.name}}"> {{x.name}} </label>
        <input type="radio" id="{{x.name}}" value="{{x.name}}" name="countries" [(ngModel)]="country[i].selected">
    </div>
</div>

检查demo


0
投票

您正在将ngModel应用于'x.name',这是对其进行检查的原因。您可以创建变量selectedRadio并分配单选按钮的值:

<div *ngFor="let x of country">
    <label for="{{x.name}}"> {{x.name}} </label>
    <input type="radio" 
        id="{{x.name}}" 
        value="{{x.name}}"
        [(ngModel)] ="selectedRadio"
        name="countries">
</div>
<p> {{ selectedRadio | json }} </p> 

TypeScript:

selectedRadio: any;

[闪电战example can be seen here

© www.soinside.com 2019 - 2024. All rights reserved.