अब तक दिए गए उत्तर केवल पहली बार काम करेंगे जो 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फ़िल्टर लागू करें ।
मुझे इसका उपयोग कब करना चाहिए?
यदि आप सूची को पूरा करने के बाद DOM में कुछ css स्टाइल लागू करना चाहते हैं, क्योंकि आपको DOM तत्वों के नए आयामों को ध्यान में रखना होगा जो कि इसके द्वारा फिर से प्रस्तुत किए गए हैं ng-repeat। (बीटीडब्ल्यू: इस तरह के ऑपरेशन एक निर्देश के अंदर किए जाने चाहिए)
समारोह को संभालने वाले समारोह में क्या न करें ngRepeatFinished:
$scope.$applyउस फ़ंक्शन में एक प्रदर्शन न करें या आप कोणीय को एक अंतहीन लूप में डाल देंगे जो कि कोणीय का पता लगाने में सक्षम नहीं होगा।
$scopeगुणों में परिवर्तन करने के लिए इसका उपयोग न करें , क्योंकि अगले $digestलूप तक वे परिवर्तन आपके विचार में प्रतिबिंबित नहीं होंगे , और चूंकि आप प्रदर्शन नहीं कर सकते हैं, $scope.$applyइसलिए वे किसी काम के नहीं होंगे।
"लेकिन फिल्टर का उपयोग उस तरह से करने के लिए नहीं है !!"
नहीं, वे नहीं हैं, यह एक हैक है, अगर आपको यह पसंद नहीं है तो इसका उपयोग न करें। यदि आप एक ही बात को पूरा करने का बेहतर तरीका जानते हैं तो कृपया मुझे बताएं।
सारांश
यह एक हैक है , और इसे गलत तरीके से उपयोग करना खतरनाक है, इसका उपयोग केवल शैलियों का उपयोग करने के बाद किया गया ng-repeatहै, और आपको कोई समस्या नहीं होनी चाहिए।
element.ready()स्निपेट का उद्देश्य क्या है ? मेरा मतलब है .. क्या यह किसी प्रकार का jQuery प्लगइन है जो आपके पास है, या तत्व तैयार होने पर इसे चालू किया जाना चाहिए?