Je ne comprends pas pourquoi * ngfor marque une boucle inifinite lorsque j'utilise la fonction pour retourner la valeur.
J'utilise angulaire 8 P>
private chatMessages = [];
private chatMessagesStream = new BehaviorSubject(this.chatMessages);
constructor(private dialogInfoService: DialogInfoService) {
this.dialogInfoService.getDialogMembers().subscribe(members => {
this.dialogMembers = members;
});
}
getMessages(): Observable<any> {
return this.chatMessagesStream.asObservable();
}
addMessage(chatMessage) {
if (chatMessage.type != 'info') {
for (let member of this.dialogMembers) {
if (member.member_uuid == chatMessage.sender_dialog_uuid) {
chatMessage.sender_name = member.member_presentation_name;
chatMessage.avatar_id = member.avatar_id;
if (member.member_uuid == this.dialogInfoService.getOwnDialogUUID()) {
chatMessage.sender_type = 'contact';
chatMessage.status = 'sending';
} else {
chatMessage.sender_type = 'consultant';
}
}
}
}
this.chatMessages.push(chatMessage);
this.chatMessagesStream.next(this.chatMessages);
}
4 Réponses :
Modifiez-vous la valeur de ChatMessages code> dans
getchatmessageextextex (chatmessage) code>. Si oui, c'est la source de ce problème p>
getchatmessageextextex (chatmessage) code> est identique comme je posterai, je pense que je ne change rien, je retourne juste la bonne valeur
Essayez d'ajouter ceci dans votre composant:
chatMessageSubscription: Subscription; constructor(private chatMessageService: ChatMessagesService) {} ngOnInit() { this.chatMessageSubscription = this.chatMessageService.chatMessagesStream .subscribe((messages: data) => { this.chatMessages = data; } }
Le problème existe toujours après votre code malheureusement: /
ngafterviewinit () code> avec ngoninit () code> li>
ol> Je ne sais pas comment vous avez testé la fonction addMessage code>, mais il y a une chance accidentellement dans l'observable lui-même qui causerait la boucle infinie. P> < p> En tant que point supplémentaire, une fois que vous recevez les données du service qui seraient un bon moment pour remplir le texte du message, au lieu de s'appuyer sur la fonction appelée à partir du modèle HTML. P> Voici une reproduction minimale de travail : https://stackblitz.com/edit/angular-xnrupp p> ol>
1. J'ai un bon code, mais quand je le collage à l'éditeur de Stackoverflow, je supprimez la citation par accident. 2. Mais après cela, je ne peux pas utiliser l'utilisateur pipe ASYNC dans NGURA dans le modèle, j'ai un post antoher à ce sujet Stackoverflow.com/questions/57613718/... 3. i le changé à Ngoninit mais cela n'aidait pas. J'essaie d'écrire au total le code purs de Wegeing Witout Suppyas Services, peut-être que cela m'aidera à trouver l'issuus. Maintenant rien n'aide.
J'ai résolu le problème en mettant J'ai besoin d'isoler ce composant car dans une touche angulaire de chaque bouton, une demande ou des messages WebSocket trigeurs un changement de détection de l'application entière, maintenant je contrôlais cela. P> chatMessagesagesviewcomponent em > strong> p> * ngfor code> une partie du code vers un nouveau composant et ajoutez à ce composant décorateur
modification de la section: changeectionstrategy.onpush code> option.
Sur Init, faites fonction pour arrêter de détecter les modifications (
détacher () code>). LOOP ITERE NOW SEULEMENT lorsque de nouveaux messages du service viennent (j'ai ajouté des détachements dans la souscription de FN comme ci-dessous).
Pouvez-vous créer un Stackblitz pour reproduire votre problème?
Pouvez-vous publier le code pour le
chatmessageService code>
@Sachingupta j'ai édité le post et j'ai ajouté ceci
@pkimtani je pourrais être difficile de le faire maintenant, mais j'essaie