2017-09-22 82 views
1

我試圖按如下方式使用MD-單選按鈕的變化,輸出:材料單選按鈕更改事件角4

<md-radio-group [(ngModel)]="selected"> 
    <md-radio-button *ngFor="let a of array" [value]="a" 
       (change)="radioChange()"> 
     {{a}} 
    </md-radio-button> 
</md-radio-group> 

TS:

selected: string; 
filter: any; 

radioChange() { 
    this.filter['property'] = selected; 
    console.log(this.filter); 
} 

這似乎總是一個在單選按鈕後面一步。即當改變選擇從無線電A到無線電B,它將console.log無線電A的值。

任何幫助將不勝感激。

乾杯,

P

回答

1

這是因爲該模型已經被更新前的變化事件。所以你的selected屬性有以前的價值。你的代碼更改爲以下,以獲取有關(change)事件:

<md-radio-group [(ngModel)]="selected"> 
    <md-radio-button *ngFor="let a of array" [value]="a" 
       (change)="radioChange($event)"> 
     {{a}} 
    </md-radio-button> 
</md-radio-group> 

...在你的班級,請執行以下操作:

import { MdRadioChange } from '@angular/material'; 
// ... 

radioChange(event: MdRadioChange) { 
    this.filter['property'] = event.value; 
    console.log(this.filter); 
} 

鏈接working demo

+0

太好了,謝謝。這完美地解決了無線電改變問題。儘管如此,仍然沒有更新管道。 SO是新的,我應該把這個問題分成兩個並接受你的答案嗎? 此外,傳遞$事件與Angular 2材料組件的更廣泛的教訓,有任何好的教程的一部分的方法? – Batters

+0

分成兩部分。閱讀有關事件:http://learnangular2.com/events/ – Faisal

+0

使用Angular 5,您需要從'@ angular/material'導入MatRadioChange,您在radioChange()方法中獲得的事件類型爲MatRadioChange,必須將(更改)事件放在所有無線電按鈕上。你可以簡單地把它放在mat-radio-group上。 – herve