क्या कोड में एक पाइप का उपयोग करना संभव है?


103

जब मैं किसी टेम्पलेट में अपने कस्टम पाइप का उपयोग करता हूं, तो यह इस प्रकार है:

{{user|userName}}

और यह अच्छी तरह से काम करता है।

क्या कोड में एक पाइप का उपयोग करना संभव है?

मैं इसे इस तरह उपयोग करने की कोशिश करता हूं:

let name = `${user|userName}`;

लेकिन यह दिखाता है

userName परिभाषित नहीं है

मेरा वैकल्पिक तरीका db.collection.findOne()कोड में मैन्युअल रूप से उपयोग कर रहा है । लेकिन क्या कोई स्मार्ट तरीका है?


आप इस तरह से टेम्प्लेट का उपयोग नहीं कर सकते, आपको पाइप को अपने कंस्ट्रक्टर में इंजेक्ट करना होगा
योआन प्रोटेक्ट

क्षमा करें, मैं इसे स्पष्ट कर दूंगा। मैं पहले से ही पाइपों को इंजेक्ट करता हूं
हांगबो मियाओ

आप किस पाइप को कोड में उपयोग करने की कोशिश कर रहे हैं? क्या यह आपका कस्टम पाइप है?
शिव

1
मुझे नहीं लगता कि आप ...कोणीय द्वारा निष्पादित नहीं किया जा सकता है। यह ES6 स्ट्रिंग इंटरपोलेशन है ...
थियरी टेम्पलर

5
देखें कि क्या यह stackoverflow.com/questions/35144821/…
शिव

जवाबों:


112

पहले providersअपने मॉड्यूल में पाइप की घोषणा करें :

import { YourPipeComponentName } from 'your_component_path';

@NgModule({
  providers: [
    YourPipeComponentName
  ]
})
export class YourServiceModule {
}

तो आप @Pipeइस तरह एक घटक में उपयोग कर सकते हैं :

import { YourPipeComponentName } from 'your_component_path';

class YourService {

  constructor(private pipe: YourPipeComponentName) {}

  YourFunction(value) {
    this.pipe.transform(value, 'pipeFilter');
  }
}

1
अच्छा लगता है! लेकिन किसी कारण से निर्भरता इंजेक्शन मेरे पाइप को कंस्ट्रक्टर में इंजेक्ट नहीं कर सकता है, भले ही इसे html में समस्याओं के बिना उपयोग किया जा सकता है। यह घोषित किया जाता है और किसी अन्य मॉड्यूल में निर्यात किया जाता है, शायद इसे प्रदाताओं की सूची में होना चाहिए, भी? हालांकि MyPipe का एक नया उदाहरण बनाना और उपयोग करना काम करता है। केवल DI की समस्या है ...
सैम

19
@ सलाम वास्तव में इसमें होना चाहिए providersYouPipeComponentNameअपने में जोड़ें providersऔर यह विधि पूरी तरह से काम करेगी।
SrAxi

4
यह भी सुनिश्चित करें कि आप इसे सही प्रदाताओं में जोड़ें। यदि आप विश्व स्तर पर पाइप का उपयोग करना चाहते हैं, तो इसे app.module प्रदाताओं में डालें। यदि आप इसे केवल कुछ आलसी लोड किए गए मॉड्यूल में उपयोग करना चाहते हैं, तो इसे अपने संबंधित मॉड्यूल के प्रदाताओं में डालें
Phil

गलत आयात पथ। @ कोणीय / सामान्य
एंड्रीस

@ और मैंने इसे संपादित किया है। वो एक गलती थी। मेरा मतलब है कि यू को आपके पाइप मॉड्यूल को आयात करना चाहिए।
saghar.fadaei

107

@ शिव सही है। और धन्यवाद!

तो घटक में पाइप का उपयोग करने का तरीका इस प्रकार है:

let name = new UserNamePipe().transform(user);

इसी तरह के एक और सवाल का लिंक


3
यह काम करता है, लेकिन यह शायद कोणीय सर्वोत्तम प्रथाओं / पसंदीदा पैटर्न का पालन नहीं कर रहा है। एक घटक पर निर्भरता में पाइप को पास करना, जैसा कि अन्य उत्तर में दर्शाया गया है, "अधिक सही" है।
जोश

क्या इस तरह से कोई प्रदर्शन मुद्दा नहीं है? कुछ लोग हर समय इसका इस्तेमाल कर सकते हैं!
मोहम्मद करमानी

2
यह पाइप का उपयोग करने का एक पूरी तरह से गलत तरीका है। पाइप एक विशेष उद्देश्य वर्ग हैं और इसका उपयोग कोणीय द्वारा प्रदान किए गए विशेष साधनों के माध्यम से किया जाना चाहिए। यदि आपको पाइप में कार्यान्वित कुछ कार्यक्षमता की आवश्यकता है, लेकिन इसे एक नियमित टाइपस्क्रिप्ट वर्ग की तरह उपयोग करने के तरीके में, तो आपको उस regularवर्ग को बनाना होगा और अपने TS कोड ( your-component.tsउदाहरण के लिए) में इसका उपयोग करना होगा । यदि आपको पाइप में समान कार्यक्षमता की आवश्यकता है, तो आप हमेशा regularपाइप से उस वर्ग का उपयोग कर सकते हैं ।
अलेक्जेंडर अबाकुमोव

सबसे बड़ा अंतर यह है कि आप इस तरह से कक्षा के अधिक उदाहरण बनाते हैं। कोणीय वाक्यविन्यास का उपयोग करने के साथ यह एक सिंगलटन की तरह व्यवहार करता है और बस एक बार त्वरित होता है।
Sir2B
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.