Tôi đã thấy vài câu hỏi trong SO thảo luận về không có bản sao được phép trong ng-lặp lại. Câu hỏi của tôi có chút khác biệt. Trong trường hợp của tôi Tôi đang bối rối vì tôi không nhận được lỗi ngay cả khi có đối tượng trùng lặp trong mảngAngularJS Ng lặp lại và trùng lặp
Đây là HTML của tôi đang
<table>
<tr ng-repeat="item in items">
<td> {{ item.email}}</td>
</tr>
</table>
Và đây là mã cho Populating mảng
app.controller('MainCtrl', function($scope) {
$scope.items=[];
$scope.items.push({
"id":"1",
"email":"[email protected]"});
$scope.items.push({
"id":"1",
"email":"[email protected]"});
$scope.items.push({
"id":"2",
"email":"[email protected]"});
$scope.items.push({
"id":"2",
"email":"[email protected]"});
});
Theo sự hiểu biết của tôi, tôi sẽ nhận được các lỗi và có những đối tượng trùng lặp trong mảng
Tuy nhiên, kết quả của nó được hiển thị hoàn hảo. Dưới đây là liên kết plunker
Rõ ràng là tôi đang thiếu cái gì cơ bản. Ai đó có thể chỉ ra khoảng cách của tôi trong sự hiểu biết?
EDIT
Đây là những gì trong ứng dụng của tôi, tôi đã phải đối mặt với (chỉ id email được thay đổi vì lý do rõ ràng)
ExampleApp.filter ("extractEmail", function() {
return function(items){
//console.log("test" + input[0].highlight.file[0]);
var filtered = [];
console.log(" items == " + items);
angular.forEach(items, function(item){
if (item){
var obj = item.highlight.file[0].toString().match(/([\w-\.]+)@((?:[\w]+\.)+)([a-zA-Z]{2,4})/);
if (obj) {
//console.log(obj[0]);
filtered.push(obj[0]);
}
}
});
console.log(filtered);
return filtered;
}
});
bản in console.log của tôi [“[email protected]", “[email protected]", “[email protected]", “[email protected]"]
lỗi tôi nhận được
Error: [ngRepeat:dupes] Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: x in clusterState| extractEmail, Duplicate key: string:[email protected], Duplicate value: “[email protected]"
Tôi đã cập nhật plunker bằng mã tương tự. Không thể tái tạo
Second Sửa
Vấn đề là với phiên bản tôi đang sử dụng: Angular JS 1.0.x hỗ trợ bản sao không thể tái tạo http://plnkr.co/edit/qrOez7aZ7X1jsOrmkfiP?p=preview
Với sự phiên bản sau có thể sao chép
http://plnkr.co/edit/q3oPCrW3RepxvWSZ1LB1?p=preview
Đây là một trong số ít những lần ai đó phàn nàn về việc không nhận được một lỗi. – Huey
cố gắng hiểu :) –
Điều này chắc chắn là một điều tốt để cố gắng hiểu. Góc là quan tâm về * bình đẳng *, không * tương đương *. '{id: 1}' có thể trông giống như '{id: 1}', nhưng '' {id: 1} === {id: 1} 'sẽ trả về' false', bởi vì nó tạo ra một đối tượng mới cho mỗi cái. Điều này là do các đối tượng và mảng, được theo dõi bằng tham chiếu, chứ không phải theo giá trị. Bây giờ, nếu bạn đã làm 'var objX = {" id ":" 1 "," email ":" [email protected] "}', và sau đó '$ scope.items.push (objX); $ scope.items.push (objX); 'bạn sẽ nhận được lỗi (vì' objX === objX' là 'true') – DRobinson