Trong chỉ thị tùy chỉnh của tôi, tôi đang thêm các phần tử vào DOM dựa trên số đối tượng trong mảng nguồn dữ liệu của tôi. Tôi cần phải xem một tài sản cụ thể trong từng đối tượng. Khi tôi thêm các phần tử này vào DOM, tôi muốn thiết lập một đồng hồ $ trên thuộc tính checked
của từng đối tượng trong mảng toppings
, nhưng nó không hoạt động và tôi không biết tại sao. Tôi thiết lập một điểm ngắt bên trong hàm cần được gọi khi thuộc tính thay đổi từ true thành false hoặc false thành true, nhưng hàm đó không bao giờ được gọi. Lý do có rõ ràng không? Tôi chỉ học Angular, vì vậy tôi có thể dễ dàng tạo ra một lỗi ngu ngốc.AngularJS: xem một thuộc tính cụ thể trong một mảng các đối tượng cho các thay đổi trong giá trị của tài sản
$scope.bits = 66; (i.e. onions and olives)
$scope.toppings = [
{ topping: 1, bits: 2, name: 'onions' },
{ topping: 2, bits: 4, name: 'mushrooms' },
{ topping: 3, bits: 8, name: 'peppers' },
{ topping: 4, bits: 16, name: 'anchovies' },
{ topping: 5, bits: 32, name: 'artichokes' },
{ topping: 6, bits: 64, name: 'olives' },
{ topping: 7, bits: 128, name: 'sausage' },
{ topping: 8, bits: 256, name: 'pepperoni' }
]
Mỗi đối tượng trong mô hình sẽ có thuộc tính mới hoặc đúng là checked
.
LƯU Ý: mảng đối tượng sẽ chứa nhiều nhất một tá mục. Hiệu suất không phải là một mối quan tâm.
link: function link(scope, iElement, iAttrs, controller, transcludeFn) {
<snip>
// At this point scope.model refers to $scope.toppings. Confirmed.
angular.forEach(scope.model, function (value, key) {
// bitwise: set checked to true|false based on scope.bits and topping.bits
scope.model[key].checked = ((value.bits & scope.bits) > 0);
scope.$watch(scope.model[key].checked, function() {
var totlBits = 0;
for (var i = 0; i < scope.model.length; i++) {
if (scope.model[i].checked) totlBits += scope.model[i].bits;
}
scope.bits = totlBits;
});
});
<snip>
Cách tiếp cận chức năng hoạt động. Cảm ơn! – Tim
Nhược điểm của phương pháp này là bạn đang tạo một trình theo dõi cho mỗi khóa trên đối tượng. $ WatchCollection hoạt động hiệu quả hơn. –
@William Lepinski: Bạn có thể giải thích lý do tại sao một watchCollection trên mảng, trong đó có để xem mọi tài sản trên mỗi mục, sẽ thực hiện tốt hơn so với một chiếc đồng hồ trên chỉ tài sản mà tôi cần phải được theo dõi? Tôi không đồng ý, tôi chỉ muốn biết làm thế nào được thực hiện. Làm thế nào là một chiếc đồng hồ sâu được thực hiện? – Tim