92 votes

Composant Angular2 @Input bidirectionnel

J'ai piloté par les données Angulaires de l'application. J'ai une bascule composant que je passe dans une basculé de l'état. Mon problème est que les deux sens de la liaison de données ne semble pas fonctionner à moins que je passe dans la bascule booléenne comme un objet. Est-il un moyen pour obtenir que cela fonctionne sans l'aide d'un EventEmitter ou de passer la variable en tant qu'objet. C'est un composant réutilisable et que la demande est largement piloté par les données ainsi passer la valeur en tant qu'objet n'est pas une option. Mon code est....

toggle.html

<input type="checkbox" [(ngModel)]="toggled" [id]="toggleId" name="check"/>

toggle.composante.ts

import { Component, Input, EventEmitter, Output } from '@angular/core';

@Component({
  moduleId: module.id,
  selector: 'toggle-switch',
  templateUrl: 'toggle-switch.component.html',
  styleUrls: ['toggle-switch.component.css']
})

export class ToggleSwitchComponent {

  @Input() toggleId: string;
  @Input() toggled: boolean;

}

parent.component.html

<toggle-switch toggleId="toggle-1" [(toggled)]="nongenericObject.toggled"></toggle-switch>

163voto

Günter Zöchbauer Points 21340

Pour [(toggled)]="..." pour travailler, vous avez besoin

   @Input() toggled: boolean;
  @Output() toggledChange: EventEmitter<boolean> = new EventEmitter<boolean>();

  changeValue() {
    this.toggled = !(this.toggled); 
    this.toggledChange.emit(this.toggled);
  }
 

Voir aussi Liaison bidirectionnelle

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