168 votes

Angulaire 6 Suppression de la méthode de modification de la sélection des matériaux.

Dans Angular Material Design 6, la méthode (change) a été supprimée. Je ne trouve pas comment remplacer la méthode change pour exécuter du code dans le composant lorsque l'utilisateur change de sélection. Merci !

451voto

VtoCorleone Points 1673

Ils l'ont changé de change a selectionChange .

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

est maintenant

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

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

30 votes

Je déteste tellement ça. Hier, je pensais que c'était un jour cool pour passer à Angular 6. Encore une fois, ils ont changé la syntaxe.

33 votes

Ils ont besoin d'un (changeEventChange) pour détecter quand l'événement de changement change.

3 votes

(selectionChange) est maintenant mis à jour en (onSelectionChange).

28voto

simpsojo Points 131

Si vous utilisez des formulaires réactifs, vous pouvez écouter les changements apportés au contrôle de sélection de la manière suivante

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

1 votes

Il est intéressant de noter qu'en utilisant l'approche des formulaires réactifs ci-dessus, vous êtes moins lié à l'interface utilisateur et moins susceptible de rencontrer des problèmes lorsque le cadre de l'interface utilisateur évolue.

1 votes

Il faut juste noter ici que si vous devez .updateValueAndValidity le contrôle n'oubliez pas de passer { emitEvent: false } afin d'éviter RangeError: Maximum call stack size exceeded . D'autre part, merci pour l'indice (+1), il m'a conduit à ce dont j'avais besoin.

0 votes

Dois-je me désabonner dans le ngOnDestroy si je suis cette approche ?

10voto

Kailas Points 672

Pour :

1) mat-select (selectionChange)="myFunction()" fonctionne dans angular as :

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) Sélection html simple (change)="myFunction()" fonctionne dans angular as :

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
}

6voto

silverhash Points 393

Pour moi (selectionChange) et la proposition (onSelectionChange) n'a pas fonctionné et je n'utilise pas de ReactiveForms . Ce que j'ai fini par faire, c'est utiliser le (valueChange) comme un événement :

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

Et ceci a fonctionné pour moi

0 votes

J'utilise un modèle de formulaire, et cela a fonctionné pour moi en utilisant ce qui suit : <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>

1voto

lingar Points 73

J'ai ce problème aujourd'hui avec mat-option-group. La chose qui m'a résolu le problème est l'utilisation d'un autre événement fourni de mat-select : changement de valeur

Je mets ici un petit code pour la compréhension :

<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>

Mat Version :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X