การใช้$index
งานได้ดีอย่างสมบูรณ์ในกรณีพื้นฐานและคำตอบของ @ charlietfl นั้นยอดเยี่ยม แต่บางครั้ง$index
ก็ไม่เพียงพอ
ลองนึกภาพคุณมีอาเรย์เดี่ยวซึ่งคุณกำลังนำเสนอในซ้ำสองอันที่ต่างกัน หนึ่งใน ng-repeat นั้นถูกกรองสำหรับวัตถุที่มีคุณสมบัติที่เป็นความจริงและอีกอันหนึ่งถูกกรองสำหรับคุณสมบัติที่เป็นเท็จ มีการนำเสนออาร์เรย์ที่กรองที่แตกต่างกันสองแบบซึ่งมาจากอาเรย์ดั้งเดิมหนึ่งชุด (หรือถ้าช่วยให้มองเห็นได้: บางทีคุณอาจมีคนจำนวนหนึ่งและคุณต้องการผู้หญิงซ้ำในชุดนั้นและอีกชุดสำหรับผู้ชายในชุดเดียวกัน ) เป้าหมายของคุณ: ลบได้อย่างน่าเชื่อถือ อาร์เรย์ดั้งเดิมโดยใช้ข้อมูลจากสมาชิกของอาร์เรย์ที่ถูกกรอง
ในแต่ละอาร์เรย์ที่ถูกกรอง $ index จะไม่เป็นดัชนีของรายการภายในอาร์เรย์เดิม มันจะเป็นดัชนีในการกรองย่อยอาร์เรย์ ดังนั้นคุณจะไม่สามารถบอกดัชนีของบุคคลนั้นในpeople
อาเรย์เดิมได้คุณจะรู้เพียงแค่ $ $ จากอาเรย์women
หรือmen
อาเรย์ย่อย พยายามที่จะลบโดยใช้ที่และคุณจะมีรายการหายไปจากทุกที่ยกเว้นที่คุณต้องการ จะทำอย่างไร?
หากคุณโชคดีพอที่จะใช้แบบจำลองข้อมูลรวมถึงตัวระบุที่ไม่ซ้ำกันสำหรับแต่ละวัตถุให้ใช้สิ่งนั้นแทน $ index เพื่อค้นหาวัตถุและsplice
ออกจากอาร์เรย์หลัก (ใช้ตัวอย่างของฉันด้านล่าง แต่ใช้ตัวระบุที่ไม่ซ้ำกัน) แต่ถ้าคุณไม่โชคดีล่ะ
เชิงมุมจริง augments แต่ละรายการในอาร์เรย์ NG-ซ้ำ (ในหลักอาร์เรย์เดิม) $$hashKey
ที่มีคุณสมบัติเฉพาะที่เรียกว่า คุณสามารถค้นหาอาเรย์ดั้งเดิมเพื่อหาคู่ที่ตรงกับ$$hashKey
ของรายการที่คุณต้องการลบและกำจัดอย่างนั้น
โปรดทราบว่า$$hashKey
นี่คือรายละเอียดการใช้งานซึ่งไม่รวมอยู่ใน API ที่เผยแพร่สำหรับ ng-repeat พวกเขาสามารถลบการสนับสนุนสำหรับคุณสมบัตินั้นได้ตลอดเวลา แต่อาจจะไม่ :-)
$scope.deleteFilteredItem = function(hashKey, sourceArray){
angular.forEach(sourceArray, function(obj, index){
// sourceArray is a reference to the original array passed to ng-repeat,
// rather than the filtered version.
// 1. compare the target object's hashKey to the current member of the iterable:
if (obj.$$hashKey === hashKey) {
// remove the matching item from the array
sourceArray.splice(index, 1);
// and exit the loop right away
return;
};
});
}
เรียกใช้ด้วย:
ng-click="deleteFilteredItem(item.$$hashKey, refToSourceArray)"
แก้ไข: การใช้ฟังก์ชั่นเช่นนี้ซึ่งปุ่มบน$$hashKey
แทนชื่อคุณสมบัติเฉพาะรุ่นยังมีข้อได้เปรียบที่เพิ่มขึ้นอย่างมากในการทำให้ฟังก์ชั่นนี้สามารถใช้ซ้ำได้ในรุ่นและบริบทที่แตกต่างกัน ให้มันมีการอ้างอิงอาร์เรย์ของคุณและการอ้างอิงรายการของคุณและมันก็ควรจะทำงาน