คำตอบที่ได้รับจนถึงขณะนี้จะใช้งานได้เฉพาะในครั้งแรกที่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 ที่คุณมีหรือมันจะถูกกระตุ้นเมื่อองค์ประกอบพร้อมหรือไม่