2016-09-02 8 views
17
@Pipe({name:'myPipe', pure: false}) 

मैं अशुद्ध पाइप को समझने में असमर्थ हूं, कुछ शुद्ध पाइप के साथ बेहतर क्या है।कोणीय में अशुद्ध पाइप क्या है?

कृपया मुझे एक सरल और बुनियादी उदाहरण के साथ समझाएं?

+0

[शुद्ध और अशुद्ध पाइप के बीच आवश्यक अंतर और क्यों मायने रखता है] पढ़ें (https://medium.com/@maximus.koretskyi/the-essential-difference-between-pure-and-impure-pipes-and -वह-वह-मामले-99 8 9 18 एए068) जो अंतर के पीछे विवरण बताता है और अंतर्निहित मानसिक मॉडल की खोज करता है –

उत्तर

22

एक शुद्ध पाइप केवल तभी कहा जाता है जब कोणीय मूल्य में परिवर्तन या पाइप को पारित पैरामीटर का पता लगाता है। प्रत्येक परिवर्तन पहचान चक्र के लिए एक अशुद्ध पाइप कहा जाता है इससे कोई फर्क नहीं पड़ता कि मूल्य या पैरामीटर बदलते हैं या नहीं।

यह परिवर्तन है कि कोणीय द्वारा पता लगाया नहीं कर रहे हैं के लिए प्रासंगिक है

  • जब आप किसी सरणी या उद्देश्य यह है कि सामग्री बदल मिल गया (लेकिन अभी भी एक ही उदाहरण है)
  • पाइप एक सेवा injects जब पारित अन्य मूल्यों तक पहुंच प्राप्त करने के लिए, कोणीय यह नहीं पहचानता कि वे बदल गए हैं या नहीं।

मैं इन मामलों में शायद आप अभी भी पाइप को निष्पादित करना चाहते हैं।

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

+1

क्या आप मुझे उदाहरण के साथ समझा सकते हैं? –

+0

उदाहरण का प्रदर्शन करने के लिए बिल्कुल क्या? http://stackoverflow.com/a/37828164/217408 एक फ़िल्टर पाइप दिखाता है (लेकिन कोई कैशिंग नहीं) –

+0

शुद्ध पाइप का अर्थ है, यह हर बार निष्पादित होगा जब कोई इसे पास इनपुट इनपुट बदल देगा। उदाहरण के लिए, '{{2 | घातीय: var}}; <इनपुट [(ngModel)] = "var" '/>। अब, जब हम इनपुट 'var' बदलते हैं, तो मान अपडेट किया जाता है। इसी प्रकार, कृपया अशुद्ध पाइप द्वारा अपना मान अपडेट करें। किसी को??यहां 'एक्सपोनेंट' मेरी पाइप –

12

पिछले उत्तर के अलावा, मैं एक और अंतर जोड़ना चाहता हूं: उदाहरणों की संख्या।

मान लीजिए कि एक HTML कोड में पाइप का कई बार उपयोग किया जाता है। जैसा:

<p> {{'Hello' | translate }}<p> 
<p> {{'World' | translate }}<p> 
  • तो पाइप शुद्ध है: पाइप उसमें केवल एक ही हो जाएगा। ट्रांसफॉर्म विधि को दो बार बुलाया जाएगा लेकिन उसी उदाहरण पर।
  • यदि पाइप अशुद्ध है: पाइप के दो उदाहरण होंगे।

(आप पाइप के निर्माता में एक यादृच्छिक आईडी उत्पन्न करके यह देख सकते हैं और दोनों में इसे प्रिंट: constructor और transform विधि)

के रूप में शुद्ध पाइप (या आम तौर पर शुद्ध कार्यों) करता है (चाहिए) किसी भी दुष्प्रभाव नहीं है, वही शुद्ध कोड किसी भी समय चिंता के बिना पुन: उपयोग किया जा सकता है। ऐसा लगता है कि शुद्ध पाइप केवल एक बार तत्काल होते हैं।

ओबीएस: यह मेरे कोणीय 4.0 पर्यावरण में मान्य है।

संबंधित मुद्दे