Ich habe kürzlich eine Chat-Funktion erstellt und bemerke einen seltsamen Fehler. Im Folgenden ist der Code verwende ich in meinem Controller:AngularJs Controller .appendChild() addiert jedes Mal, wenn die Ansicht besucht wird
myFirebase.on('child_added', function(snapshot) {
var msg = snapshot.val();
var msgUsernameElement = document.createElement("b");
msgUsernameElement.textContent = msg.user;
var msgTextElement = document.createElement("p");
msgTextElement.textContent = msg.message;
var msgElement = document.createElement("div");
msgElement.appendChild(msgUsernameElement);
msgElement.appendChild(msgTextElement);
document.getElementById("messages").append(msgElement);
});
Angenommen wir die Chat-Ansicht wird zum ersten Mal eingeben, wenn ich dann chatten, die .appendChild() arbeitet völlig in Ordnung und die typisierte Nachricht erscheint in den div "Nachrichten". Angenommen, wir verlassen die Chat-Ansicht und geben sie erneut ein und geben eine neue Chat-Nachricht ein und senden sie. Dann wird die .appendChild() -Ausgabe zweimal ausgeführt, und die gleiche Nachricht wird zweimal in den div-Nachrichten angezeigt. Dies wird linear fortgesetzt. Wenn wir zum fünften Mal den Controller erneut aufrufen und eine Nachricht senden, wird die Nachricht fünfmal an die div "messages" angehängt ... Was passiert hier?
Ich verwende das Ionic Framework und die fertige App-Vorlage 'Tabs'. Meine Chat-Funktion befindet sich im Chat-Details-Controller.
Sie können Ihren Code umgestalten, indem Sie den allgemeinen Code verwenden und ihn in eine Methode einfügen als Parameter und du wirst Recht haben. Sie können sich auch Meteor (http://meteor.com) ansehen, da es sich um einen Stack handelt, der für einfache reaktive Anwendungen (wie Chat) entwickelt wurde, Sie abonnieren einfach die Daten und Änderungen werden automatisch gesendet. – Mikkel