এখনও অবধি দেওয়া উত্তরগুলি কেবল প্রথমবারের জন্য 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
ফিল্টারটি প্রয়োগ করুন ।
আমি কখন এটি ব্যবহার করব?
তালিকাটি রেন্ডারিং শেষ হয়ে যাওয়ার পরে আপনি যদি ডিওএম-তে নির্দিষ্ট সিএসএস শৈলী প্রয়োগ করতে চান তবে আপনার দ্বারা ডিওএম উপাদানগুলির নতুন মাত্রাগুলি বিবেচনা করতে হবে যা দ্বারা পুনরায় রেন্ডার করা হয়েছে ng-repeat
। (বিটিডাব্লু: এই ধরণের অপারেশনগুলি কোনও নির্দেশিকার ভিতরে করা উচিত)
ngRepeatFinished
ইভেন্টটি পরিচালনা করে এমন ফাংশনে কী করবেন না :
$scope.$apply
সেই ফাংশনে একটি সম্পাদন করবেন না বা আপনি কৌনিকটিকে একটি অন্তহীন লুপে রাখবেন যা কৌণিক সনাক্ত করতে সক্ষম হবে না।
$scope
বৈশিষ্ট্যগুলিতে পরিবর্তন করার জন্য এটি ব্যবহার করবেন না , কারণ পরবর্তী $digest
লুপ হওয়া পর্যন্ত এই পরিবর্তনগুলি আপনার দৃষ্টিতে প্রতিফলিত হবে না এবং যেহেতু আপনি কোনও সম্পাদন করতে পারবেন না $scope.$apply
সেগুলি কোনও কাজে আসবে না।
"তবে ফিল্টারগুলি সেভাবে ব্যবহার করার জন্য নয় !!"
না, তারা না, এটি একটি হ্যাক, যদি আপনি এটি পছন্দ করেন না তবে এটি ব্যবহার করবেন না। আপনি যদি একই জিনিসটি সম্পাদন করার আরও ভাল উপায় জানেন তবে দয়া করে আমাকে তা জানান।
সংক্ষেপিত
এটি একটি হ্যাক , এবং এটি ভুল উপায়ে ব্যবহার করা বিপজ্জনক, ng-repeat
রেন্ডারিং শেষ হওয়ার পরে এটি কেবল স্টাইল প্রয়োগ করার জন্য ব্যবহার করুন এবং আপনার কোনও সমস্যা নেই।
element.ready()
স্নিপেটের উদ্দেশ্য কী ? আমি বলতে চাইছি .. এটি আপনার কাছে কিছু প্রকারের jQuery প্লাগইন, বা উপাদান প্রস্তুত হওয়ার সাথে সাথে এটি ট্রিগার করা উচিত?