मुझे लगता है कि समझ में ng-show
और ng-hide
एक तत्व पर वर्ग सेट और उस को प्रभावित ng-if
नियंत्रण एक तत्व डोम के भाग के रूप में प्रदान की गई है या नहीं।
क्या इसके अतिरिक्त / या इसके विपरीत चुनने ng-if
पर दिशानिर्देश हैं?ng-show
ng-hide
मुझे लगता है कि समझ में ng-show
और ng-hide
एक तत्व पर वर्ग सेट और उस को प्रभावित ng-if
नियंत्रण एक तत्व डोम के भाग के रूप में प्रदान की गई है या नहीं।
क्या इसके अतिरिक्त / या इसके विपरीत चुनने ng-if
पर दिशानिर्देश हैं?ng-show
ng-hide
जवाबों:
आपके उपयोग के मामले पर निर्भर करता है लेकिन अंतर को संक्षेप में प्रस्तुत करने के लिए:
ng-if
DOM से तत्वों को हटा देगा। इसका मतलब यह है कि आपके सभी हैंडलर या उन तत्वों से जुड़ी कोई भी चीज खो जाएगी। उदाहरण के लिए, यदि आप किसी एक बाल तत्व पर क्लिक हैंडलर को बाध्य करते हैं, जब ng-if
असत्य का मूल्यांकन करता है, तो उस तत्व को DOM से हटा दिया जाएगा और आपका क्लिक हैंडलर किसी भी तरह से काम नहीं करेगा, भले ही ng-if
बाद में सत्य का मूल्यांकन हो और तत्व प्रदर्शित करता हो। आपको हैंडलर को रीटच करने की आवश्यकता होगी।ng-show/ng-hide
DOM से तत्वों को नहीं हटाता है। यह तत्वों को छिपाने / दिखाने के लिए सीएसएस शैलियों का उपयोग करता है (ध्यान दें: आपको अपनी कक्षाएं जोड़ने की आवश्यकता हो सकती है)। इस तरह आपके हैंडलर जो बच्चों से जुड़े हुए थे वे गुम नहीं होंगे।ng-if
एक बच्चा गुंजाइश बनाता है जबकि ng-show/ng-hide
नहीं करता हैवे तत्व जो DOM में नहीं हैं, उनका प्रदर्शन प्रभाव कम है और आपके वेब ऐप ng-if
की तुलना में उपयोग करते समय तेज़ी से दिखाई दे सकते हैं ng-show/ng-hide
। मेरे अनुभव में, अंतर नगण्य है। दोनों का उपयोग करते समय एनिमेशन संभव हैं ng-show/ng-hide
और ng-if
दोनों के लिए कोणीय प्रलेखन में उदाहरण के साथ।
अंत में, आपको जिस प्रश्न का उत्तर देने की आवश्यकता है वह यह है कि क्या आप तत्व को DOM से निकाल सकते हैं या नहीं?
ng-if
। डॉक्स में एनिमेशन पैराग्राफ और उदाहरण की जाँच करें । इसके अलावा के साथ ng-hide/ng-show
सीएसएस चयनकर्ताओं की तरह :first-child
या :nth-child
ठीक से काम नहीं करेगा क्योंकि छिपा हुआ तत्व भी गिना जाएगा।
ng-if
नया स्कोप ng-show
नहीं बनाता है ।
एक CodePen के लिए यहाँ देखें कि कैसे ng-if / ng-show कार्य, DOM- वार में अंतर प्रदर्शित करता है।
@markovuksanovic ने प्रश्न का अच्छी तरह से उत्तर दिया है। लेकिन मैं इसे दूसरे दृष्टिकोण से आता हूं: मैं हमेशाng-if
उन तत्वों का उपयोग करता हूं और उन तत्वों को डोम से बाहर निकालता हूं , जब तक कि:
$watch
अदृश्य हों , तो किसी कारण से आपको अपने तत्वों पर डेटा-बाइंडिंग और -es की आवश्यकता होती है । इसके लिए प्रपत्र एक अच्छा मामला हो सकता है, यदि आप उन इनपुट पर वैधता की जांच करना चाहते हैं जो वर्तमान में दिखाई नहीं दे रहे हैं, तो यह निर्धारित करने के लिए कि क्या पूरा फॉर्म वैध है।कोणीय वास्तव में अच्छी तरह से लिखा गया है। यह तेज़ है, यह देखते हुए कि यह क्या करता है। लेकिन यह क्या करता है जादू का एक पूरा गुच्छा है जो कठिन चीजें बनाता है (जैसे 2-रास्ता डेटा-बाइंडिंग) तुच्छ रूप से आसान दिखता है। उन सभी चीजों को आसान बनाना कुछ प्रदर्शन ओवरहेड को मजबूर करता है। आप यह महसूस करने के लिए हैरान हो सकते हैं $digest
कि DOM के एक कूबड़ पर चक्र के दौरान सैकड़ों या हजारों बार एक सेटर फ़ंक्शन का मूल्यांकन किया जाता है जो किसी को भी नहीं दिख रहा है। और तब आपको पता चलता है कि आप दर्जनों या सैकड़ों अदृश्य तत्व एक ही काम कर रहे हैं ...
अधिकांश जेएस निष्पादन-गति के मुद्दों को प्रस्तुत करने के लिए डेस्कटॉप वास्तव में पर्याप्त शक्तिशाली हो सकते हैं। लेकिन अगर आप मोबाइल के लिए विकसित कर रहे हैं, तो एनजी का उपयोग करते हुए-जब भी मानवीय रूप से संभव हो, कोई दिमाग नहीं होना चाहिए। मोबाइल प्रोसेसर पर जेएस की गति अभी भी मायने रखती है। एनजी-अगर का उपयोग करना बहुत ही कम लागत पर संभावित-महत्वपूर्ण अनुकूलन प्राप्त करने का एक बहुत आसान तरीका है।
ng-show
जब आपके पास उपयोगी हो, तो कह सकते हैं कि प्रत्येक को बहुत सारी सामग्री मिलती है जो रेंडर करने में समय लेती है। पहले रेंडरिंग के बाद, टैब के बीच बढ़ना तत्काल ng-if
होगा , जबकि री-रेंडरिंग, बाइंडिंग इवेंट्स आदि की आवश्यकता होगी। जैसा कि आप कहते हैं, यह पृष्ठभूमि में निष्पादित घड़ियों को बनाता है। कोणीय की सख्त जरूरत हैng-ifshowwatch
मेरे अनुभव से:
1) यदि आपके पृष्ठ में एक टॉगल है जो किसी चीज़ को दिखाने / छुपाने के लिए ng-if / ng-show का उपयोग करता है, तो ng-if किसी ब्राउज़र विलंब (धीमे) के अधिक होने का कारण बनता है। उदाहरण के लिए: यदि आपके पास दो विचारों के बीच टॉगल करने के लिए उपयोग किया जाने वाला बटन है, तो एनजी-शो तेज़ होने लगता है।
2) एनजी-अगर स्कोप बनाएगा / नष्ट करेगा जब यह सही / गलत का मूल्यांकन करता है। यदि आपके पास ng-if से जुड़ा कोई नियंत्रक है, तो उस नियंत्रक कोड को हर बार एनजी-if का मूल्यांकन सही होने पर निष्पादित किया जाएगा। यदि आप एनजी-शो का उपयोग कर रहे हैं, तो नियंत्रक कोड केवल एक बार निष्पादित होता है। इसलिए यदि आपके पास एक बटन है जो एनजी-इफ और एनजी-शो का उपयोग करके कई विचारों के बीच टॉगल करता है, तो आप अपने नियंत्रक कोड को कैसे लिखते हैं, इससे बहुत फर्क पड़ेगा।
उत्तर सरल नहीं है:
यह लक्ष्य मशीनों (मोबाइल बनाम डेस्कटॉप) पर निर्भर करता है, यह आपके डेटा की प्रकृति, ब्राउज़र, ओएस, उस पर चलने वाले हार्डवेयर पर निर्भर करता है ... यदि आपको वास्तव में जानना है तो आपको बेंचमार्क करने की आवश्यकता होगी।
यह ज्यादातर एक मेमोरी बनाम कम्प्यूटेशन समस्या है ... अधिकांश प्रदर्शन मुद्दों के साथ अंतर बार-बार तत्वों (एन) जैसे सूचियों के साथ महत्वपूर्ण हो सकता है , खासकर जब नेस्टेड (एनएक्सएन, या इससे भी बदतर) और यह भी कि आप इन तत्वों के अंदर किस तरह की गणना करते हैं। :
एनजी-शो : यदि वे वैकल्पिक तत्व अक्सर मौजूद (घने) होते हैं, जैसे कि 90% समय, तो उन्हें तैयार होने में तेज हो सकता है और केवल उन्हें दिखा / छिपा सकता है, खासकर यदि उनकी सामग्री सस्ती है (सिर्फ सादा पाठ, कुछ नहीं गणना करना या लोड करना)। यह मेमोरी को खा जाता है क्योंकि यह DOM को छिपे हुए तत्वों से भर देता है, लेकिन बस कुछ दिखा / छिपाता है जो पहले से मौजूद है, ब्राउज़र के लिए एक सस्ता ऑपरेशन होने की संभावना है।
एनजी-अगर : यदि इसके विपरीत तत्वों को दिखाए जाने की संभावना नहीं है (विरल) तो उन्हें बनाएं और उन्हें वास्तविक समय में नष्ट कर दें, खासकर अगर उनकी सामग्री प्राप्त करने के लिए महंगा है (गणना / छंटनी / छननी, चित्र, उत्पन्न चित्र)। यह दुर्लभ या 'ऑन-डिमांड' तत्वों के लिए आदर्श है, यह DOM को न भरने के संदर्भ में मेमोरी बचाता है, लेकिन बहुत अधिक संगणना (तत्वों को नष्ट / नष्ट करना) और बैंडविड्थ (दूरस्थ सामग्री प्राप्त करना) खर्च कर सकता है। यह इस बात पर भी निर्भर करता है कि आप दृश्य में कितनी गणना करते हैं (फ़िल्टरिंग / छँटाई) बनाम जो आपके पास पहले से मॉडल में है (पूर्व-छांटे गए / पूर्व-फ़िल्टर किए गए डेटा)।
एक महत्वपूर्ण नोट:
ngIf (ngShow के विपरीत) आमतौर पर बच्चे के स्कोप बनाता है जो अप्रत्याशित परिणाम उत्पन्न कर सकते हैं।
मेरे पास इससे संबंधित एक मुद्दा था और मैंने यह जानने के लिए MUCH समय बिताया है।
(मेरा निर्देश गलत दायरे के लिए अपने मॉडल मूल्यों को लिख रहा था।)
तो, अपने बालों को बचाने के लिए बस ngShow का उपयोग करें जब तक कि आप बहुत धीमी गति से न चलाएं।
प्रदर्शन अंतर वैसे भी मुश्किल से ध्यान देने योग्य है और मुझे अभी तक इस बात पर यकीन नहीं है कि यह बिना किसी परीक्षण के किसका पक्ष है ...
$parent.scopevar
एक एनजीआई के भीतर डेटा बाइंडिंग में उपयोग करने से चाइल्ड स्कोप मुद्दों जैसी चीजें ठीक हो जाएंगी जब एनजीआईएफ
ngIf
हर जगह यह विश्वास करते हुए देखा है कि इससे प्रदर्शन में सुधार होगा। यह बस सच नहीं है और कोई यह नहीं कह सकता है कि कौन सबसे अच्छा है, ngIf
या ngShow
, किसी विशेष मामले में परीक्षण या गहन विश्लेषण के बिना। इसलिए, मैं अभी भी भूल जाने की सलाह देता हूं ngIf
, जब तक कि कोई व्यक्ति खराब प्रदर्शन नहीं देखता या जानता है कि वह क्या कर रहा है
एनजी-अगर एनजी-इन पर और एनजी-नियंत्रक पर एनजी-नियंत्रक पर एक बड़ा प्रभाव मामला होगा, इसमें आवश्यक आंशिक लोड नहीं होगा और जब तक ध्वज एनजी-नियंत्रक पर सत्य नहीं होगा, तब तक यह नियंत्रक को लोड नहीं करेगा जब तक कि झंडा न हो सच है, लेकिन समस्या यह है कि जब कोई झंडा एनजी में गलत हो जाता है, तो वह डोम से हटा देगा जब झंडा सच हो जाता है तो वह डोम को फिर से लोड कर देगा इस मामले में एनजी-शो बेहतर है, एक समय के लिए शो एनजी-अगर बेहतर है
यदि आप ng-show or ng-hide
सामग्री का उपयोग करते हैं (उदाहरण के लिए सर्वर से थंबनेल) अभिव्यक्ति के मूल्य के बावजूद लोड किया जाएगा, लेकिन अभिव्यक्ति के मूल्य के आधार पर प्रदर्शित किया जाएगा।
यदि आप ng-if
सामग्री का उपयोग करते हैं तो केवल लोड किया जाएगा यदि एनजी की अभिव्यक्ति-अगर सत्य का मूल्यांकन करती है।
एनजी-अगर का उपयोग करना एक ऐसी स्थिति में एक अच्छा विचार है जहां आप सर्वर से डेटा या छवियों को लोड करने जा रहे हैं और केवल उन लोगों को दिखाते हैं जो उपयोगकर्ताओं की बातचीत पर निर्भर करते हैं। इस तरह आपका पृष्ठ भार अनावश्यक nw गहन कार्यों द्वारा अवरुद्ध नहीं होगा।
src
विशेषता की तलाश करते हैं img
, जब वर्तमान में यह लोड हो जाता है!