Tôi có một ứng dụng đơn giản để tôi có thể thêm người dùng vào danh sách và xóa chúng.Phạm vi góc không cập nhật khi xóa một mục
Biểu mẫu để thêm người dùng mới liên kết với $scope.newPerson
. Khi gửi biểu mẫu, tôi thêm đối tượng newPerson
vào $scope.people
là một mảng chứa các đối tượng person
.
Tôi lặp qua mảng people
với chỉ thị ng-repeat
, để in ra những người hiện được thêm vào phạm vi. Những hàng tất cả đều có một nút remove (đoạn Jade):
div.row(data-person, ng-repeat="person in people", ng-model="person")
button(ng-click="removePerson(person)") Remove
Khi tôi bấm vào nút Remove, tôi thực hiện chức năng này:
$scope.removePerson = function(person) {
var index = $scope.people.indexOf(person);
if (index > -1) {
$scope.people.splice(index, 1);
person = null;
}
}
này loại bỏ các dòng từ bảng, và đặt person
phạm vi đến null
. Batarang hiển thị { This scope has no models }
sau đó.
Tuy nhiên, tôi đã nhận thấy rằng mảng people
của tôi không cập nhật. Khi tôi kiểm tra phạm vi của nó ở Batarang, người mà tôi vừa xóa vẫn nằm trong mảng đó. Khi tôi bắt đầu nhập để thêm người mới, nó sẽ cập nhật. Nếu tôi gửi toàn bộ trang đến máy chủ của mình mà không làm điều này, mảng vẫn chứa những người đã xóa.
Nếu tôi đặt $scope.$apply()
sau person = null;
, tôi sẽ nhận được hành vi mong đợi, tuy nhiên nó sẽ phát ra lỗi là apply is in progress
. Tôi cũng đọc gọi số $apply()
mình được coi là thực hành không tốt. (?)
Tôi mới tham gia Angular và tôi dường như không tìm thấy nhiều thông tin về cách giải quyết vấn đề này. Làm cách nào để tôi cập nhật mảng của mình khi tôi xóa một người? Cảm ơn.
Có thể cho bạn để tạo ra một jsfiddle nhanh hoặc plnkr rằng demostrates vấn đề của bạn? Tôi tin rằng đó là một vấn đề phạm vi, nhưng không có đủ thông tin trong những gì bạn cung cấp để xem tất cả các phạm vi/chỉ thị/bộ điều khiển của bạn được thiết lập như thế nào. – dtabuenc
BTW, người = null không làm bất cứ điều gì khác hơn là thiết lập người để null trong hàm (nó không thay đổi người bên ngoài chức năng). Ngoài ra, bạn là chính xác, bạn không bao giờ nên gọi áp dụng cho mình (khác với trong một chỉ thị để đáp ứng với một sự kiện bên ngoài). – dtabuenc