0
votes

Pourquoi * ngfor marque une boucle infinie lorsque j'utilise la fonction pour retourner la valeur et le navigateur de collision?

Je ne comprends pas pourquoi * ngfor marque une boucle inifinite lorsque j'utilise la fonction pour retourner la valeur.

J'utilise angulaire 8 P>

Voir le modèle HTML strong> 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);
}



5 commentaires

Pouvez-vous créer un Stackblitz pour reproduire votre problème?


Pouvez-vous publier le code pour le chatmessageService


@Sachingupta j'ai édité le post et j'ai ajouté ceci


@pkimtani je pourrais être difficile de le faire maintenant, mais j'essaie


4 Réponses :


0
votes

Modifiez-vous la valeur de ChatMessages dans getchatmessageextextex (chatmessage) . Si oui, c'est la source de ce problème


1 commentaires

getchatmessageextextex (chatmessage) est identique comme je posterai, je pense que je ne change rien, je retourne juste la bonne valeur



0
votes

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


1 commentaires

Le problème existe toujours après votre code malheureusement: /



1
votes
  1. Vous n'avez pas fermé la classement xxx
    1. Votre chatMessageService retourne un observable afin que vous ayez besoin de vous abonner à celui-ci xxx
      1. Comme vous avez un problème de comportement avec une valeur par défaut, vous pouvez vous abonner en toute sécurité avant que la vue a été initialisée pour éviter les erreurs de vérification du contenu. remplacer ngafterviewinit () avec ngoninit ()

        Je ne sais pas comment vous avez testé la fonction addMessage , mais il y a une chance accidentellement dans l'observable lui-même qui causerait la boucle infinie. < 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.

        Voici une reproduction minimale de travail : https://stackblitz.com/edit/angular-xnrupp


1 commentaires

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.



0
votes

J'ai résolu le problème en mettant * ngfor une partie du code vers un nouveau composant et ajoutez à ce composant décorateur modification de la section: changeectionstrategy.onpush option. Sur Init, faites fonction pour arrêter de détecter les modifications ( détacher () ). 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).

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.

chatMessagesagesviewcomponent xxx


0 commentaires