Các câu trả lời đã được đưa ra cho đến nay sẽ chỉ hoạt động ngay lần đầu tiên ng-repeat
được đưa ra , nhưng nếu bạn có động ng-repeat
, nghĩa là bạn sẽ thêm / xóa / lọc các mục và bạn cần được thông báo mỗi khi ng-repeat
được kết xuất, những giải pháp đó sẽ không làm việc cho bạn.
Vì vậy, nếu bạn cần được thông báo MERYI LẦN rằngng-repeat
lần đầu tiên được kết xuất lại và không chỉ lần đầu tiên, tôi đã tìm ra cách để làm điều đó, nó khá 'hacky', nhưng nó sẽ hoạt động tốt nếu bạn biết bạn là ai đang làm. Sử dụng điều này $filter
trong của bạn ng-repeat
trước khi sử dụng bất kỳ khác$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;
};
})
Đây sẽ $emit
là một sự kiện được gọi ngRepeatFinished
mỗi khi nó ng-repeat
được kết xuất.
Làm thế nào để sử dụng nó:
<li ng-repeat="item in (items|ngRepeatFinish) | filter:{name:namedFiltered}" >
Bộ ngRepeatFinish
lọc cần được áp dụng trực tiếp cho một Array
hoặc một Object
định nghĩa trong của bạn $scope
, bạn có thể áp dụng các bộ lọc khác sau.
Làm thế nào KHÔNG sử dụng nó:
<li ng-repeat="item in (items | filter:{name:namedFiltered}) | ngRepeatFinish" >
Không áp dụng các bộ lọc khác trước và sau đó áp dụng ngRepeatFinish
bộ lọc.
Khi nào tôi nên sử dụng cái này?
Nếu bạn muốn áp dụng các kiểu css nhất định vào DOM sau khi danh sách kết thúc hiển thị, bởi vì bạn cần phải tính đến kích thước mới của các thành phần DOM đã được kết xuất lại bởi ng-repeat
. (BTW: những loại hoạt động đó nên được thực hiện trong một chỉ thị)
Những gì KHÔNG nên làm trong chức năng xử lý ngRepeatFinished
sự kiện:
Không thực hiện $scope.$apply
chức năng đó hoặc bạn sẽ đặt Angular vào một vòng lặp vô tận mà Angular sẽ không thể phát hiện ra.
Không sử dụng nó để thực hiện các thay đổi trong các $scope
thuộc tính, vì những thay đổi đó sẽ không được phản ánh trong chế độ xem của bạn cho đến $digest
vòng lặp tiếp theo và vì bạn không thể thực hiện nên $scope.$apply
chúng sẽ không được sử dụng.
"Nhưng các bộ lọc không có nghĩa là được sử dụng như vậy !!"
Không, họ không, đây là một hack, nếu bạn không thích nó không sử dụng nó. Nếu bạn biết một cách tốt hơn để hoàn thành điều tương tự, xin vui lòng cho tôi biết điều đó.
Tóm tắt
Đây là một hack và sử dụng sai cách rất nguy hiểm, chỉ sử dụng nó để áp dụng các kiểu sau khi ng-repeat
kết xuất xong và bạn không nên có bất kỳ vấn đề nào.
element.ready()
đoạn trích là gì? Ý tôi là .. đó là một số loại plugin jQuery mà bạn có, hay nó nên được kích hoạt khi phần tử đã sẵn sàng?