Angular 6 Metode perubahan mat-pilih material dihilangkan


129

Di Angular Material Design 6, metode (ubah) telah dihapus. Saya tidak dapat menemukan cara mengganti metode perubahan untuk mengeksekusi kode dalam komponen ketika pengguna mengubah pilihan Terima kasih!

Jawaban:


348

Mengubahnya dari changemenjadi selectionChange.

<mat-select (change)="doSomething($event)">

sekarang

<mat-select (selectionChange)="doSomething($event)">

https://material.angular.io/components/select/api


26
Aku sangat benci ini. Kemarin saya pikir itu adalah hari yang keren untuk meningkatkan ke Angular 6. Sekali lagi, mereka mengubah sintaks.
Luis Lavieri

17
Mereka membutuhkan (changeEventChange)acara untuk mendeteksi kapan perubahan acara berubah.
Stack Underflow

3
(selectionChange) sekarang diperbarui menjadi (onSelectionChange).
Debadatta

@Debadatta - Di mana Anda melihat ini? Saya masih melihat selectionChange material.angular.io/components/select/api
VtoCorleone

2
Semua komentar di atas hanya lebih jauh menyoroti mengapa masuk akal untuk tetap menggunakan pendekatan formulir reaktif, sesuai jawaban saya di bawah, jika memungkinkan. Di samping catatan, menurut saya komentarnya tidak terlalu adil karena orang-orang Angular Material melakukan pekerjaan luar biasa dan kami mendapatkannya secara gratis.
Joseph Simpson

24

Jika Anda menggunakan formulir Reaktif Anda dapat mendengarkan perubahan pada kontrol pilih seperti itu ..

this.form.get('mySelectControl').valueChanges.subscribe(value => { ... do stuff ... })

1
Perlu dicatat bahwa menggunakan pendekatan bentuk reaktif di atas Anda tidak terlalu terikat dengan UI dan cenderung tidak mengalami masalah karena kerangka kerja UI tersebut berkembang
Joseph Simpson

Saya menyukai ini, saya akan mencobanya.
userx

Sekadar dicatat di sini bahwa jika Anda perlu .updateValueAndValiditykontrol jangan lupa { emitEvent: false }untuk menghindari RangeError: Maximum call stack size exceeded. Di sisi lain, terima kasih atas petunjuk (+1), ini menuntun saya ke apa yang saya butuhkan.
dcg

Apakah saya harus berhenti berlangganan ngOnDestroy jika saya mengikuti pendekatan ini?
ohidano

Anda selalu perlu membersihkan langganan Anda untuk menghindari kebocoran memori dan perilaku tak terduga.
Joseph Simpson

7

Untuk:

1) mat-pilih (selectionChange)="myFunction()"bekerja dalam sudut seperti:

sample.component.html

 <mat-select placeholder="Select your option" [(ngModel)]="option" name="action" 
      (selectionChange)="onChange()">
     <mat-option *ngFor="let option of actions" [value]="option">
       {{option}}
     </mat-option>
 </mat-select>

sample.component.ts

actions=['A','B','C'];
onChange() {
  //Do something
}

2) Pilihan html sederhana (change)="myFunction()"berfungsi dalam sudut seperti:

sample.component.html

<select (change)="onChange()" [(ngModel)]="regObj.status">
    <option>A</option>
    <option>B</option>
    <option>C</option>
</select>

sample.component.ts

onChange() {
  //Do something
}

3

Bagi saya (selectionChange)dan yang disarankan (onSelectionChange)tidak berhasil dan saya tidak menggunakan ReactiveForms. Apa yang akhirnya saya lakukan adalah menggunakan (valueChange)acara seperti:

<mat-select (valueChange)="someFunction()">

Dan ini berhasil untuk saya


Saya menggunakan formulir template, dan mengerjakannya dengan yang berikut ini: <mat-select placeholder="Select an option" [(ngModel)]="project.managerId" name="managerId" required (selectionChange)="fillComanager(project.managerId)"> <mat-option *ngFor="let manager of managers" [value]="manager.id"> {{ manager.name }} </mat-option> </mat-select>
pcdro

1

Saya mengalami masalah ini hari ini dengan mat-option-group. Hal yang memecahkan masalah saya adalah menggunakan acara lain yang disediakan mat-pilih: valueChange

Saya taruh di sini sedikit kode untuk memahami:

<mat-form-field >
  <mat-label>Filter By</mat-label>
  <mat-select  panelClass="" #choosedValue (valueChange)="doSomething1(choosedValue.value)"> <!-- (valueChange)="doSomething1(choosedValue.value)" instead of (change) or other event-->

    <mat-option >-- None --</mat-option>
      <mat-optgroup  *ngFor="let group of filterData" [label]="group.viewValue"
                    style = "background-color: #0c5460">
        <mat-option *ngFor="let option of group.options" [value]="option.value">
          {{option.viewValue}}
        </mat-option>
      </mat-optgroup>
  </mat-select>
</mat-form-field>

Versi Mat:

"@ angular / material": "^ 6.4.7",

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.