Angulaire 2: comment puis-je détecter les changements d'attribut pour les attributs d'entrée sur un Composant?
J'ai Angulaire à 2 Contrôleur qui ressemble à ceci:
@Component({
selector: 'my-component',
template: '<div>The value is: {{ value }}</div>',
})
class MyComponent implements OnInit {
@Input()
value: string;
@Output
valueChange = new EventEmitter<number>();
ngOnInit() {
this.valueChange.subscribe(value => {
console.log('new value:', value); //<-- does not get triggered
});
}
}
Mais lorsque la valeur de value
changements à partir d'un modèle de liaison:
<my-component [value]="someValue" /> <!-- valueChange not triggered! -->
La valueChange
l'événement n'est pas déclenché donc, même si le modèle correctement les mises à jour et affiche la nouvelle valeur de la composante ne sait pas qu'il a été modifié.
Comment puis-je détecter lors de la saisie d'attributs sur mon contrôleur sont-elles changé?
OriginalL'auteur David Wolever | 2016-08-08
Vous devez vous connecter pour publier un commentaire.
À mon avis,
Output
est pour votre composant à émettre de l'événement à d'autres personnes afin qu'ils la jour de leur point de vue si nécessaire, il doit être utilisé uniquement pour les modifications effectuées à l'interne qui ont besoin d'être diffusé (d'où le nom deOutput
). Le déclenchement d'uneOutput
événement surInput
changements peuvent provoquer un comportement inattendu (comme maintenant quevalueChange
est déclenché pour tous les changements, à la fois à l'intérieur et à l'extérieur, et pas vraiment uneOutput
plus).Dans votre cas, si vous voulez faire des trucs quand votre
value
changements, vous pouvez en faire un setter:OriginalL'auteur Harry Ninh
J'ai utilisé les poseurs de détection lorsque les variables d'entrée ont été modifiés. Vous devez utiliser le
inputs
clé dans la@Component
décorateur au lieu de la@Input
déclaration pour obtenir que cela fonctionne, comme suit:Aussi pour info, la méthode de la classe est
ngOnInit
au lieu deonInit
.Un accesseur get doit et ne peut pas avoir une valeur, vous pouvez mettre à jour votre méthode get pour
get value() {}
je pense que votre@output
peut également avoir besoin d'être mis à jour pour@Output()
OriginalL'auteur Joey Robert
J'ai été en mesure de contourner le problème par la mise en œuvre de
OnChanges
:Qui déclenche automatiquement l'
Change
cas chaque fois que les Angulaires détecte un changement... mais est-il une façon de le faire nativement?OriginalL'auteur David Wolever