अब तक दिए गए उत्तर केवल पहली बार काम करेंगे जो 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 प्लगइन है जो आपके पास है, या तत्व तैयार होने पर इसे चालू किया जाना चाहिए?