Je veux capturer l'événement dans un composant émis par un autre composant.
J'ai fait le code suivant P>
myComponent_2.ts strong> p> myComponent_1.ts strong> - Ajout du code ci-dessous Dans Ngoninit () P> this.myservice.event.subscribe((value) => {
console.log(value);
});
4 Réponses :
Vous devez utiliser un ReplaySubject afin qu'il émet la valeur émise précédemment. L'ESEMITITER perd toutes les valeurs après leur émettre.
Si le service tente d'émettre la valeur avant la création du composant, la valeur sera perdue à moins que vous utilisiez l'un des sujets tampon. P>
private _event = new ReplaySubject<any>(1); get event(): EventEmitter<any> { return this._event; }
Utilisez Sujet Strong>: un sujet est comme un sujet observable, mais peut-être multidiffusion à de nombreux observateurs. Les sujets sont comme des éthémiteurs: ils maintiennent un registre de nombreux auditeurs. dans this.yourService.listenYourVariable().subscribe(
variable => {
this.data = variable;
}
)
Emismitter est un sujet. Ils sont prolongés de la classe de sujet. Github. com / angulaire / angulaire / blob / ...
C'est vrai, mais l'équipe de l'Angular2 a déclaré qu'elle peut changer la mise en œuvre de l'éventisseuse, donc une bonne pratique de l'utiliser uniquement avec @Output Decorator, de cette manière, le code d'utilisateur ne sera pas rompu en raison d'un changement possible.
Si vous voulez utiliser un événement, lisez-le. J'ai créé un repo et j'ai eu ce travail en ajoutant un @Output à l'événement comme: } p> puis pour vous assurer qu'il n'y avait pas de problèmes de chronométrage que j'ai créé une bouton pour ajouter l'auditeur dans un composant et un autre bouton pour déclencher l'événement. Ainsi, je pense que l'erreur principale est le manque de décorateur @Output. p> p>
Après examen plus approfondi, vous n'avez pas besoin de @Output (). Cependant, il semble que ReplaySubject est ma prochaine aventure d'apprentissage.
L'un des choix préférés est il est très utile lorsque les composants ne sont pas liés les uns aux autres. Strong> p> ex:
Service: StringService P> comportementsBject code>.
Ici, un service peut être utilisé pour partager les données entre le composant 2.
stringObtained:string
this.stringService.stringValue.subscribe(message=>this.stringObtained=message)