У меня есть простое приложение, в котором я могу добавить пользователей в список и удалить их.Угловая область не обновляется при удалении элемента
Форма для добавления нового пользователя связывается с $scope.newPerson
. При отправке формы я добавляю объект newPerson
к $scope.people
, который представляет собой массив, содержащий person
объектов.
I цикл над массивом people
с директивой ng-repeat
, чтобы распечатать людей, которые в настоящее время добавлены в область действия. Эти строки все есть кнопка удалить (Jade фрагмент):
div.row(data-person, ng-repeat="person in people", ng-model="person")
button(ng-click="removePerson(person)") Remove
При нажатии на кнопку Удалить, я выполнить эту функцию:
$scope.removePerson = function(person) {
var index = $scope.people.indexOf(person);
if (index > -1) {
$scope.people.splice(index, 1);
person = null;
}
}
Это удаляет строку из таблицы, и устанавливает person
до null
. Затем Батаранг показывает { This scope has no models }
.
Однако, я заметил, что мой массив people
не обновляется. Когда я проверяю его область в Batarang, человек, которого я только что удалил, все еще находится в этом массиве. Когда я набираю текст, чтобы добавить нового человека, он обновляется. Если я отправлю всю страницу на свой сервер, не делая этого, массив все еще содержит удаленных людей.
Если я положил $scope.$apply()
после person = null;
, я получаю ожидаемое поведение, однако оно выдает сообщение об ошибке apply is in progress
. Я также читал, что вызов $apply()
сам считается плохой практикой. (?)
Я новичок в Angular, и я не могу найти много информации о решении этой проблемы. Как мне заставить его обновлять массив, когда я удаляю человека? Благодарю.
Можно ли для вас, чтобы быстро создать jsfiddle или plnkr что demostrates проблему? Я считаю, что это проблема с областью, но информации о том, что вы предоставили, недостаточно, чтобы узнать, как настроены все ваши области/директивы/контроллеры. – dtabuenc
BTW, person = null не делает ничего, кроме того, что человек задает значение null в функции (это не изменяет человека вне функции). Кроме того, вы правы, вы никогда не должны называть себя применять (кроме директивы в ответ на внешнее событие). – dtabuenc