2012-07-26 13 views
22

मैं कोणीय के लिए काफी नया हूं, लेकिन मुझे लगता है कि यह पागल है।AngularJs फ़िल्टरिंग के लिए यह सामान्य है

मुझे एक नियंत्रक दायरे में एनजी-दोहराने के माध्यम से कई संग्रह प्रदर्शित किए जा रहे हैं। एक सरल क्वेरी करने के लिए प्रत्येक सूची के लिए एक इनपुट फ़ील्ड है। मैं अपने कोड में विभिन्न फ़िल्टर के साथ खेल रहा था और मैंने अपने फ़िल्टर फ़ंक्शन में console.log डालने का अंत किया। मुझे एहसास हुआ कि हर बार जब मेरे फिल्टर फ़ंक्शन को एक सूची के लिए बुलाया जाता था, तो इसे दायरे में सभी सूचियों के लिए बुलाया जा रहा था। इसके अलावा, यह फ़िल्टर फ़ंक्शन को हर बार दो बार कॉल कर रहा था। तो 3 संग्रहों के साथ, सूचियों में से एक को फ़िल्टर करने से फ़िल्टर फ़ंक्शन 6 बार कॉल होगा।

मैंने सोचा कि शायद यह मेरा कस्टम फ़िल्टर था, इसलिए मैंने इसे डिफ़ॉल्ट फ़िल्टर फ़ंक्शन पर आज़माया। वही कहानी। मैं गलत यहाँ क्या कर रहा हूँ/

: यहाँ मेरी कोड है:

https://dl.dropbox.com/u/905197/angular-filter-test.html

कंसोल पर जाएं और अपने आप के लिए देखते हैं? यह इतनी सरल बात की तरह लगता है लेकिन यह इतना काम कर रहा है।

उत्तर

25

यह सामान्य है, कोणीय एक 'गंदे-जांच' दृष्टिकोण का उपयोग करता है, इसलिए यह देखने के लिए सभी फ़िल्टरों को कॉल करने की आवश्यकता है कि कोई परिवर्तन मौजूद है या नहीं। इसके बाद यह पता लगाता है कि आपके पास एक वैरिएबल (जिसे आपने टाइप किया है) पर एक बदलाव है और फिर यह अन्य फ़िल्टरों को दोबारा निष्पादित करता है ताकि यह पता लगा सके कि इसमें अन्य बदलाव हैं या नहीं।

this प्रश्न

+1

दिलचस्प का पहला जवाब देखें। यह बताता है कि उन सभी को क्यों बुलाया जा रहा है। अब जब भी परिवर्तन हुआ है, तो उन सभी को दो बार क्यों बुलाया जाता है? –

+1

पहला कॉल उन लोगों से है जो परिवर्तन का पता लगा रहे हैं। क्योंकि वहां एक है तो उन्हें यह देखने के लिए फिर से बुलाया जाना चाहिए कि क्या कोई खबर बदलती है क्योंकि एक दर्शक बदल सकता है। इस प्रक्रिया को तब तक दोहराया जाएगा जब तक कोई परिवर्तन नहीं मिलता है या 'लूप' अधिकतम इंटरैक्शन की संख्या तक पहुंच जाता है (मुझे लगता है कि यह 10 है)। –

+0

इससे कैसे बचें? मैं एक जेसन कॉल करता हूं लेकिन इसे कहीं भी क्लिक करके 10 बार तक बुलाया जा सकता है। – Gino