AngularJS में, मैं इसके समान सिंटैक्स का उपयोग करते हुए सेवाओं और नियंत्रकों के अंदर फिल्टर (पाइप) का उपयोग करने में सक्षम हूं:
$filter('date')(myDate, 'yyyy-MM-dd');
क्या एंगुलर में सेवाओं / घटकों में पाइप का उपयोग करना संभव है?
AngularJS में, मैं इसके समान सिंटैक्स का उपयोग करते हुए सेवाओं और नियंत्रकों के अंदर फिल्टर (पाइप) का उपयोग करने में सक्षम हूं:
$filter('date')(myDate, 'yyyy-MM-dd');
क्या एंगुलर में सेवाओं / घटकों में पाइप का उपयोग करना संभव है?
जवाबों:
हमेशा की तरह कोणीय में, आप निर्भरता इंजेक्शन पर भरोसा कर सकते हैं:
import { DatePipe } from '@angular/common';
class MyService {
constructor(private datePipe: DatePipe) {}
transformDate(date) {
return this.datePipe.transform(date, 'yyyy-MM-dd');
}
}
DatePipe
अपने मॉड्यूल में अपने प्रदाताओं की सूची में जोड़ें ; यदि आप ऐसा करना भूल जाते हैं तो आपको एक त्रुटि मिलेगी no provider for DatePipe
:
providers: [DatePipe,...]
Angular 6 को अपडेट करें : Angular 6 अब पाइप द्वारा सार्वजनिक रूप से उपयोग किए जाने वाले प्रत्येक प्रारूपण को बहुत अधिक प्रदान करता है। उदाहरण के लिए, अब आप formatDate
सीधे फ़ंक्शन का उपयोग कर सकते हैं ।
import { formatDate } from '@angular/common';
class MyService {
constructor(@Inject(LOCALE_ID) private locale: string) {}
transformDate(date) {
return formatDate(date, 'yyyy-MM-dd', this.locale);
}
}
कोणीय 5 से पहले : हालांकि चेतावनी दी गई थी कि DatePipe
संस्करण 5 तक Intl एपीआई पर निर्भर था, जो सभी ब्राउज़रों द्वारा समर्थित नहीं है ( संगतता तालिका की जांच करें )।
यदि आप पुराने कोणीय संस्करणों का उपयोग कर रहे हैं, तो आपको Intl
किसी भी समस्या से बचने के लिए अपने प्रोजेक्ट में पॉलीफ़िल को जोड़ना चाहिए । अधिक विस्तृत उत्तर के लिए इस संबंधित प्रश्न को देखें ।
इस दृष्टिकोण के बजाय अन्य उत्तरों से DI दृष्टिकोण का उपयोग करने की सलाह देते हैं
आपको सीधे कक्षा का उपयोग करने में सक्षम होना चाहिए
new DatePipe().transform(myDate, 'yyyy-MM-dd');
उदाहरण के लिए
var raw = new Date(2015, 1, 12);
var formatted = new DatePipe().transform(raw, 'yyyy-MM-dd');
expect(formatted).toEqual('2015-02-12');
Date
कंस्ट्रक्टर का उपयोग करते समय , महीने 0
आधारित होते हैं । तो 0
जनवरी है और 1
फरवरी है। सही गायबy
error TS2345: Argument of type 'string[]' is not assignable to parameter of type 'string'.
लाइन परvar formatted = new DatePipe().transform(raw, ['yyyy-MM-dd']);
@NgModule({ providers:[DatePipe] })
फिर अपनी कक्षा में, आयात और इंजेक्शन constructor( private datePipe: DatePipe ){}
हाँ, यह एक साधारण कस्टम पाइप का उपयोग करके संभव है। कस्टम पाइप का उपयोग करने का लाभ अगर हमें भविष्य में तारीख प्रारूप को अपडेट करने की आवश्यकता होती है, तो हम एक फ़ाइल में जाकर अपडेट कर सकते हैं।
import { Pipe, PipeTransform } from '@angular/core';
import { DatePipe } from '@angular/common';
@Pipe({
name: 'dateFormatPipe',
})
export class dateFormatPipe implements PipeTransform {
transform(value: string) {
var datePipe = new DatePipe("en-US");
value = datePipe.transform(value, 'MMM-dd-yyyy');
return value;
}
}
{{currentDate | dateFormatPipe }}
आप हमेशा इस पाइप का उपयोग कहीं भी, घटक, सेवाओं आदि में कर सकते हैं
उदाहरण के लिए
export class AppComponent {
currentDate : any;
newDate : any;
constructor(){
this.currentDate = new Date().getTime();
let dateFormatPipeFilter = new dateFormatPipe();
this.newDate = dateFormatPipeFilter.transform(this.currentDate);
console.log(this.newDate);
}
निर्भरता आयात करना मत भूलना।
import { Component } from '@angular/core';
import {dateFormatPipe} from './pipes'
मुझे एक त्रुटि मिली क्योंकि DatePipe प्रदाता नहीं है, इसलिए इसे इंजेक्ट नहीं किया जा सकता है। एक समाधान यह है कि इसे अपने ऐप मॉड्यूल में एक प्रदाता के रूप में रखा जाए, लेकिन मेरा पसंदीदा समाधान इसे तुरंत करना था।
मैंने DatePipe के सोर्स कोड को देखा कि कैसे उसे लोकेल मिला: https://github.com/angular/angular/blob/5.2.5/packages/common/src/pipes/date_pipe.ts#15-L174
मैं इसे एक पाइप के भीतर उपयोग करना चाहता था, इसलिए मेरा उदाहरण एक अन्य पाइप के भीतर है:
import { Pipe, PipeTransform, Inject, LOCALE_ID } from '@angular/core';
import { DatePipe } from '@angular/common';
@Pipe({
name: 'when',
})
export class WhenPipe implements PipeTransform {
static today = new Date((new Date).toDateString().split(' ').slice(1).join(' '));
datePipe: DatePipe;
constructor(@Inject(LOCALE_ID) private locale: string) {
this.datePipe = new DatePipe(locale);
}
transform(value: string | Date): string {
if (typeof(value) === 'string')
value = new Date(value);
return this.datePipe.transform(value, value < WhenPipe.today ? 'MMM d': 'shortTime')
}
}
यहाँ कुंजी Inject, और LOCALE_ID को कोणीय के मूल से आयात कर रही है, और फिर इसे इंजेक्ट कर रही है ताकि आप इसे ठीक से इंस्टेंट करने के लिए DatePipe को दे सकें।
अपने ऐप मॉड्यूल में आप अपने प्रदाताओं को इस तरह से DatePipe भी जोड़ सकते हैं:
import { DatePipe } from '@angular/common';
@NgModule({
providers: [
DatePipe
]
})
अब आप इसे केवल अपने कंस्ट्रक्टर में इंजेक्ट कर सकते हैं, जहां जरूरत है (जैसे कि cexbrayat के उत्तर में)।
या तो समाधान काम किया है, मुझे नहीं पता कि कौन सा कोणीय सबसे "सही" पर विचार करेगा, लेकिन मैंने इसे मैन्युअल रूप से तुरंत चुनना चुना क्योंकि कोणीय खुद को एक प्रदाता के रूप में डेटपाइप प्रदान नहीं करता है।
new
पाइप को ऊपर उठाते हैं, तो आपको अभी भी लोकेल को डीआई करना होगा। मुझे पूरा @Inject(LOCALE_ID) private locale: string
वाक्य रचना बोझिल लगता है ।
यदि आप अपने घटकों में अपने कस्टम पाइप का उपयोग करना चाहते हैं, तो आप जोड़ सकते हैं
@Injectable({
providedIn: 'root'
})
अपने कस्टम पाइप के लिए एनोटेशन। फिर, आप इसे सेवा के रूप में उपयोग कर सकते हैं
providedIn: 'root'
हमारे पाइप के अंदर होना अच्छा है या एक स्थानीय मॉड्यूल में प्रदान किया जाता है जहां पाइप का उपयोग किया जाता है?
यदि आप 'नया myPipe ()' नहीं करना चाहते हैं, क्योंकि आप पाइप पर निर्भरता का इंजेक्शन लगा रहे हैं, तो आप प्रदाता जैसे घटक में इंजेक्शन लगा सकते हैं और नए उपयोग कर सकते हैं।
उदाहरण:
// In your component...
import { Component, OnInit } from '@angular/core';
import { myPipe} from './pipes';
@Component({
selector: 'my-component',
template: '{{ data }}',
providers: [ myPipe ]
})
export class MyComponent() implements OnInit {
data = 'some data';
constructor(private myPipe: myPipe) {}
ngOnInit() {
this.data = this.myPipe.transform(this.data);
}
}
कोणीय 6 के रूप में आप formatDate
से आयात कर सकते हैं@angular/common
घटकों के अंदर उपयोग करने के लिए उपयोगिता हैं।
इसे https://github.com/smdunn/angular/commit/3adeb0d96344c15201f7f1a0fae7e533a408e4ae पर देखा गया था
मैं के रूप में इस्तेमाल किया जा सकता है:
import {formatDate} from '@angular/common';
formatDate(new Date(), 'd MMM yy HH:mm', 'en');
हालांकि लोकेल की आपूर्ति की जानी है
आप सेवाओं या घटक ts में दिनांक को प्रारूपित करने के लिए formatDate () का उपयोग कर सकते हैं। वाक्य - विन्यास:-
formatDate(value: string | number | Date, format: string, locale: string, timezone?: string): string
इस तरह से सामान्य मॉड्यूल से formatDate () आयात करें,
import { formatDate } from '@angular/common';
और इसे कक्षा में इस तरह से उपयोग करें,
formatDate(new Date(), 'MMMM dd yyyy', 'en');
आप इस तरह कोणीय द्वारा प्रदान किए गए पूर्वनिर्धारित प्रारूप विकल्पों का भी उपयोग कर सकते हैं,
formatDate(new Date(), 'shortDate', 'en');
आप यहां अन्य सभी पूर्वनिर्धारित प्रारूप विकल्प देख सकते हैं,