При запуске проблемы, когда у меня есть повторяющаяся DIV на моей странице, но я получаю дубликаты при добавлении новых строк. Так, например, если у меня есть строки R и A и Row B, а затем я нажимаю «Добавить», чтобы добавить новую строку, мне бы хотелось увидеть три строки. Однако я получаю 5 строк: Row A, Row B, затем Row A, Row B и новый Row C.Угловая - Firebase - Повторение DIV ng-repeat дублирование новых строк
Страница инициализируется в порядке, отображает только 3 строки, но что я делаю неправильно с помощью «Добавить «из новых строк ... Кажется, это не освежает, как хотелось бы?
Любая помощь будет замечательной! Спасибо!
Мой нг-повтор выглядит следующим образом:
<div ng-repeat="infant in Infants" class="list card">
<h2>{{infant.name}} - {{infant.ID}}</h2>
<a class="item item-icon-left assertive" href="#"> <i class="icon ion-ios-analytics"></i> Last measurement 188mm/190mm (size 5.5) </a>
</div>
Инициализация из младенцев выше достигается с помощью глобального массива:
$scope.Infants = [];
...
if (firebaseUser) {
//set the user and infant list variables
$log.log("Signed in as:", firebaseUser.uid);
var usersRef = firebase.database().ref('users');
loggedInUser = usersRef.child(firebaseUser.uid);
loggedInUser.on('value', snapshot => {
$log.log("UserDetails:", snapshot.val());
});
InfantList = loggedInUser.child('infantList');
InfantList.on('value', snapshot => {
$log.log("InfantDetails:", snapshot.val());
angular.forEach(snapshot.val(), function (value, key) {
$log.log("val", value);
$log.log("key", key);
$scope.Infants.push(value);
});
});
}
Тогда вызов функции, когда «» Добавить» нажатие кнопки выглядит следующим образом:
$scope.AddProfile = function() {
// get the firebase location
var newInfantRef = firebase.database().ref('/users/' + firebaseUser.uid + '/infantList/');
// create the element
var newRef = newInfantRef.push();
//add attributes
var newItem = {
riskLevel: '1.0'
, ID: newRef.key
, name: "Reggie"
, gender: "M"
, DOB: "2015-02-01"
};
// Write the new infant.
var newInfant = {};
newInfant['/' + newRef.key + '/'] = newItem;
newInfantRef.update(newInfant);
}
Спасибо, Жерар! ... Вы имеете в виду добавить в функцию «Добавить профайл»? –
Обратите внимание, что вы слушали изменения значений на полном узле InfantList и его дочерних элементах, а затем повторяли их все, чтобы получить свои значения (и вызывать дублируемую проблему), если вы сделаете так, как предложил Жерар, и используйте прослушиватель с добавлением дочерних элементов вы должны позаботиться о двух вещах: - Теперь каждый раз, когда триггер прослушивателя содержит сам дочерний узел, вам не нужно перебирать его. - Изменения значения в дочерних элементах не будут вызывать слушателя, чтобы сделать это вам нужно событие [child-changed] (https://firebase.google.com/docs/database/web/lists-of-data#listen_for_child_events) – flapedriza
Ах .. я тебя достал. Боже, что я не знаю здесь! Я исправил это, добавив строку: $ scope.Infants = []; после строки «InfantList.on (« значение », моментальный снимок => {« повторная инициализация массива –