使用 angular2 在 mat-radio-group 中设置默认选择的 mat-radio-button

Set mat-radio-button default selected in a mat-radio-group with angular2

我的 angular 应用遇到了这个问题。我在 mat-radio-group 中有很多选项,但这些选项是根据 json 对象动态放置的。像这样:

这是 json 对象

{
  "list": [
    {"name": "some name 1", ID: "D1"},
    {"name": "some name 2", ID: "D2"}
  ]
}

在此示例中,我的列表中只有两个对象,但可以是 9 个、20 个或任意数量的对象。

所以我希望在我的 html 中,无论有多少对象,都只选择第一个,即使列表发生变化,也只选择第一个对象。

这是我的 html:

<mat-radio-group name="opList"  fxLayout="column">
  <mat-radio-button *ngFor="let op of listOfOptions"  name="opList" >{{ op.name}}</mat-radio-button>
</mat-radio-group>

listOfOptions 变量有 JSON 对象。

如何设置总是选中第一个对象?

在JSON

中添加一个checked属性
{
  "list": [
    {"name": "some name 1", ID: "D1", "checked": true},
    {"name": "some name 2", ID: "D2", "checked": false}
  ]
}

然后是

    <mat-radio-group name="opList"  fxLayout="column">
      <mat-radio-button *ngFor="let op of listOfOptions" 
      [checked]="op.checked" name="opList" >{{ op.name}}</mat-radio-button>
    </mat-radio-group>

使用 [value]="op.name" 并绑定到您的组件变量,例如 [(ngModel)]="chosenItem"

HTML:

<mat-radio-group name="opList"  fxLayout="column" [(ngModel)]="chosenItem">
      <mat-radio-button *ngFor="let op of list" [value]="op.name" name="opList" >{{ op.name}}</mat-radio-button>
  </mat-radio-group>

在您的组件中:

list = [
    { "name": "some name 1", ID: "D1"},
    { "name": "some name 2", ID: "D2"}
]
chosenItem = this.list[0].name;

let i = index添加到*ngFor,然后将[value][checked]挂钩。

<mat-radio-group>
  <mat-radio-button *ngFor="let o of options; let i = index" [value]="i" [checked]="i === 0">
<mat-radio-group>

这将选中第一个单选按钮。

我也有这个问题。我正在使用 angular material 7 并尝试使用 [checked]="i==0" 但由于某种原因,它没有用。我还尝试向名为 isDefault 的 JSON 对象添加一个新的布尔字段,然后使用 [checked]="obj.isDefault" 但没有结果。 最后,我终于通过从 OnInit 方法设置默认值解决了这个问题。 我知道这意味着需要多写一些代码,但这正是我解决问题的方法。

here you can see an example

您可以将 [checked]='true' 与 HTML 中的第一个单选按钮一起使用。

如果要更改选中的值,也可以动态设置。

 <mat-radio-group >
     <mat-radio-button [checked]='true'>yes </mat-radio-button>
</mat-radio-group>

对于那些仍在寻找正确答案的人,我会遵循文档:here 在 ngOnInit() 中添加一点:

它开始了 - TS:

import {Component, OnInit} from '@angular/core';


@Component({
  selector: 'radio-btns-test',
  templateUrl: 'radio-btns-test.html',
  styleUrls: ['radio-btns-test.css'],
})
export class RadioBtnsTest implements OnInit {
                             // data source for the radio buttons:
  seasons: string[] = ['Winter', 'Spring', 'Summer', 'Autumn'];

                             // selected item
  favoriteSeason: string;

                             // to dynamically (by code) select item
                             // from the calling component add:
  @Input() selectSeason: string;



  ngOnInit() {
                             // To have a default radio button checked
                             // at the page loading time (fixed solution)
      this.favoriteSeason = 'Summer';

                             // OR  (do only one)
                             // To dynamically (by code) select item
                             // from the calling component add:
      this.favoriteSeason = this.selectSeason;
  }

}

HTML:

<label id="example-radio-group-label">Pick your favorite season</label>

<mat-radio-group
  aria-labelledby="example-radio-group-label"
  class="example-radio-group"
  [(ngModel)]="favoriteSeason">

  <mat-radio-button 
       class="example-radio-button" 
       *ngFor="let season of seasons" 
       [value]="season">
    {{season}}
  </mat-radio-button>

</mat-radio-group>

<div>Your favorite season is: {{favoriteSeason}}</div>

CSS

.example-radio-group {
  display: flex;
  flex-direction: column;
  margin: 15px 0;
}

.example-radio-button {
  margin: 5px;
}

为了完成这个例子 - 从另一个组件启动 radio-btn-test 像这样调用它:

<radio-btns-test [selectSeason]="'Summer'"></radio-btns-test>

使用 checked 属性 true 将单选按钮选择为 默认值.

示例:

<mat-radio-group>
     <mat-radio-button [checked]="true"> Yes </mat-radio-button>
     <mat-radio-button> No </mat-radio-button>
</mat-radio-group>