คำตอบที่ได้รับจนถึงขณะนี้จะใช้งานได้เฉพาะในครั้งแรกที่ng-repeat
ได้รับการแสดงผลแต่ถ้าคุณมีแบบไดนามิกng-repeat
หมายถึงว่าคุณกำลังจะเพิ่ม / ลบ / รายการกรองและคุณจะต้องได้รับการแจ้งเตือนทุกครั้งที่ng-repeat
ได้รับการแสดงผลโซลูชั่นเหล่านั้นจะไม่ทำงานสำหรับคุณ
ดังนั้นหากคุณจำเป็นต้องได้รับการแจ้งเตือนทุกครั้งที่การng-repeat
แสดงผลซ้ำและไม่ใช่แค่ครั้งแรกฉันได้พบวิธีการทำเช่นนั้นมันค่อนข้าง 'แฮ็ค' แต่จะทำงานได้ดีถ้าคุณรู้ว่าคุณเป็นใคร การทำ ใช้สิ่งนี้$filter
ในของคุณng-repeat
ก่อนที่คุณจะใช้อื่น ๆ$filter
:
.filter('ngRepeatFinish', function($timeout){
return function(data){
var me = this;
var flagProperty = '__finishedRendering__';
if(!data[flagProperty]){
Object.defineProperty(
data,
flagProperty,
{enumerable:false, configurable:true, writable: false, value:{}});
$timeout(function(){
delete data[flagProperty];
me.$emit('ngRepeatFinished');
},0,false);
}
return data;
};
})
$emit
เหตุการณ์นี้จะเรียกว่าngRepeatFinished
ทุกครั้งที่ng-repeat
แสดงผล
วิธีใช้งาน:
<li ng-repeat="item in (items|ngRepeatFinish) | filter:{name:namedFiltered}" >
ngRepeatFinish
ความต้องการของตัวกรองเพื่อนำมาใช้โดยตรงไปยังArray
หรือObject
กำหนดไว้ในของคุณ$scope
คุณสามารถใช้ตัวกรองอื่น ๆ หลังจาก
วิธีที่จะไม่ใช้:
<li ng-repeat="item in (items | filter:{name:namedFiltered}) | ngRepeatFinish" >
อย่าใช้ตัวกรองอื่นก่อนแล้วจึงใช้ngRepeatFinish
ตัวกรอง
ฉันควรใช้สิ่งนี้เมื่อใด
หากคุณต้องการใช้สไตล์ CSS บางอย่างใน DOM หลังจากรายการเสร็จสิ้นการเรนเดอร์เนื่องจากคุณต้องคำนึงถึงมิติใหม่ขององค์ประกอบ DOM ที่ถูกเรนเดอร์ใหม่โดย ng-repeat
ที่ได้รับอีกครั้งโดยการแสดงผล (BTW: การดำเนินการประเภทนั้นควรทำภายในคำสั่ง)
สิ่งที่ไม่ควรทำในฟังก์ชั่นที่จัดการกับngRepeatFinished
เหตุการณ์:
อย่าทำ$scope.$apply
ฟังก์ชั่นนั้นมิฉะนั้นคุณจะใส่ Angular ในการวนซ้ำไม่รู้จบที่ Angular จะไม่สามารถตรวจจับได้
ห้ามใช้เพื่อทำการเปลี่ยนแปลงใน$scope
คุณสมบัติเนื่องจากการเปลี่ยนแปลงเหล่านั้นจะไม่ปรากฏในมุมมองของคุณจนกว่า$digest
ลูปถัดไปและเนื่องจากคุณไม่สามารถใช้งานได้$scope.$apply
มันจะไม่มีประโยชน์อะไร
"แต่ตัวกรองไม่ได้ถูกใช้งานอย่างนั้น !!"
ไม่พวกเขาไม่ใช่นี่คือแฮ็คถ้าคุณไม่ชอบมันก็ไม่ได้ใช้ หากคุณรู้วิธีที่ดีกว่าในการบรรลุสิ่งเดียวกันโปรดแจ้งให้เราทราบ
สรุป
นี่คือแฮ็กและการใช้ในทางที่ผิดนั้นเป็นอันตรายใช้เฉพาะสำหรับการใช้สไตล์หลังจากที่ng-repeat
การเรนเดอร์เสร็จสิ้นและคุณไม่ควรมีปัญหาใด ๆ
element.ready()
ตัวอย่างคืออะไร ฉันหมายความว่า .. มันเป็นปลั๊กอิน jQuery ที่คุณมีหรือมันจะถูกกระตุ้นเมื่อองค์ประกอบพร้อมหรือไม่