Чтобы обнаружить изменения на дочерних элементах direct , вы можете использовать событие child_changed
вместо value
следующим образом:
firebase
.database()
.ref("salas/" + id)
.on('child_changed', snapshot => {
console.log(snapshot.key);
console.log(snapshot.val());
});
Если Вы знаете аванс точную структуру данных в "salas/" + id
, и эта структура данных имеет ограниченное число детей детей (детей ...), вы можете использовать эту технику и объявить несколько слушателей: один для родительского узла и один для каждого дочернего узла (и, возможно, для каждого дочернего узла дочернего узла ...) следующим образом:
firebase
.database()
.ref("salas/" + id)
.on("child_changed", snapshot => {
if (!snapshot.hasChildren()) { //If the snapshot has some children, we don't do anything, since this case will be taken into account by the listener declared for the child node
handleChildChange(snapshot.key);
}
});
firebase
.database()
.ref("salas/" + id + "/letras")
.on('child_changed', snapshot => {
if (!snapshot.hasChildren()) {
handleChildChange("letras/" + snapshot.key);
}
});
firebase
.database()
.ref("salas/" + id + "/temas")
.on('child_changed', snapshot => {
if (!snapshot.hasChildren()) {
handleChildChange("temas/" + snapshot.key);
}
});
//....
handleChildChange(nodeKey) {
//Do something with nodeKey
}
Конечно, этот подход действителен, только если количество слушателей, которые нужно объявить, остается разумным!
Более подробную информацию о различных возможных событиях вы найдете в do c.