Firebase child_added seulement obtenir de l'enfant ajoutés
De la Firebase API:
Enfant Ajouté: Cet événement sera déclenché une seule fois pour chaque départ de l'enfant
à cet endroit, et il sera déclenché à chaque fois qu'une nouvelle
l'enfant est ajouté.
Code:
listRef.on('child_added', function(childSnapshot, prevChildName) {
//do something with the child
});
Mais étant donné que la fonction est appelée une fois pour chaque enfant à cet endroit, est-il possible d'obtenir que l'enfant qui a été effectivement ajouté?
- Pourquoi ne pas cette méthode, il suffit de faire ce qu'il dit qu'il va faire? Il ne devrait faire qu'une seule chose -- déclencher à chaque fois qu'un enfant est ajouté -- rien de plus.
- Oui d'accord @jose Browne .sa source de confusion...
Vous devez vous connecter pour publier un commentaire.
Suivre les choses ajoutées depuis quelques point de contrôle sans aller chercher les records précédents, vous pouvez utiliser
endAt()
etlimit()
pour attraper le dernier enregistrement:ref.endAt().limit(1)
. Il ne se déclenche pas pour les autres nouveaux enregistrements ajoutés après cet enregistrement. Je suis en essais ce avec Angularfire 0.8.0limit()
méthode est obsolète.limitToLast()
etlimitToFirst()
méthodes de le remplacer.child_added
fonction prend deux paramètres,snapshot
etprevChildKey
, avec cette approcheprevChildKey
est toujours null. J'ai utiliséref.endAt().on('child_added', function(snapshot, prev) {});
J'ai essayé d'autres réponses chemin, mais invoquées au moins une fois du dernier enfant. Si vous avez un moment clé dans vos données, vous pouvez le faire de cette façon.
Depuis l'appel de la
ref.push()
méthode en l'absence de données génère chemin de clés basé sur le temps, c'est ce que j'ai fait:Remarque que rien n'est écrit à la référence(ou "clé") qui
ref.push()
rendu, donc il n'y a pas besoin de prendre de données vide.Swift3 Solution:
Vous pouvez récupérer vos données précédentes par le code suivant:
et d'observer les nouvelles données par le code suivant.
Depuis
.limitToLast()
méthode appelée encore pour le dernier élément de votre liste, même si elle n'est pas un nouvel élément, nous pouvons le résoudre comme ci-dessous:L'idée est la suivante:
Créer une Liste qui permet à votre firebase éléments; et chaque fois que
onChildAdded(...)
méthode est appelée, vérifier si la future datasnapshot est dans votre liste ou non; si non, alors c'est de nouvelles donnéesOnt une valeur unique pour chaque élément. (ceci peut être réalisé lorsque vous ajoutez des articles dans Firebase à l'aide de la clé générée par
.push()
méthode.Remplacer
.equals()
méthode de votre modèle de classe dans le but de remplir la comparaison basée sur cette valeur unique.Extrait de Code
Note: j'ai mis la liste des éléments dans la classe du modèle de mon choix.
Modèle de classe
Firebase auditeur
De limiter alors à la dernière