অ্যাঙ্গুলারজেএস-এ, আমি এর অনুরূপ সিনট্যাক্স ব্যবহার করে পরিষেবা এবং নিয়ন্ত্রণকারীদের ভিতরে ফিল্টার (পাইপ) ব্যবহার করতে সক্ষম হয়েছি:
$filter('date')(myDate, 'yyyy-MM-dd');
কৌনিকতে এই জাতীয় পরিষেবা / উপাদানগুলিতে পাইপ ব্যবহার করা কি সম্ভব?
অ্যাঙ্গুলারজেএস-এ, আমি এর অনুরূপ সিনট্যাক্স ব্যবহার করে পরিষেবা এবং নিয়ন্ত্রণকারীদের ভিতরে ফিল্টার (পাইপ) ব্যবহার করতে সক্ষম হয়েছি:
$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,...]
কৌণিক 6 আপডেট করুন : কৌণিক 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
কোনও সমস্যা এড়াতে আপনার প্রকল্পে পলিফিল যুক্ত করা উচিত । আরও বিস্তারিত উত্তরের জন্য এই সম্পর্কিত প্রশ্নটি দেখুন ।
এই পদ্ধতির পরিবর্তে অন্যান্য উত্তর থেকে ডিআই পদ্ধতির ব্যবহারের পরামর্শ দিন
আপনার সরাসরি ক্লাস ব্যবহার করতে সক্ষম হওয়া উচিত
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'
আমি একটি ত্রুটি পেয়েছি কারণ ডেট পাইপ সরবরাহকারী নয়, তাই এটি ইনজেকশন দেওয়া যায় না। একটি সমাধান হ'ল এটি আপনার অ্যাপ্লিকেশন মডিউলে সরবরাহকারী হিসাবে রাখা তবে আমার পছন্দের সমাধানটি তা ইনস্ট্যান্ট করা।
এটি লোকাল কীভাবে পেয়েছে তা দেখতে আমি ডেটপাইপের উত্স কোডটি দেখেছিলাম: https://github.com/angular/angular/blob/5.2.5/packages/common/src/pines/date_pipe.ts#L15-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')
}
}
এখানে কীটি ইনজুলার এবং LOCALE_ID কৌনিক মূল থেকে আমদানি করছে এবং তারপরে ইনজেকশন দিচ্ছে যাতে আপনি এটি ডেটপাইপকে সঠিকভাবে ইনস্ট্যান্ট করতে দিতে পারেন।
আপনার অ্যাপ্লিকেশন মডিউলে আপনি এইভাবে আপনার সরবরাহকারী অ্যারেতে ডেট পাইপ যুক্ত করতে পারেন:
import { DatePipe } from '@angular/common';
@NgModule({
providers: [
DatePipe
]
})
এখন আপনি এটি আপনার নির্মাতাকে যেখানে প্রয়োজন সেখানে ইনজেকশন করতে পারেন (যেমন সেক্সব্রায়াতের উত্তরে)।
উভয়ই সমাধান কাজ করেছে, আমি জানি না কোন কোন কৌণিক সর্বাধিক "সঠিক" বিবেচনা করবে তবে কৌণিক নিজেই সরবরাহকারীর হিসাবে ডেটপাইপ সরবরাহ না করায় আমি নিজেই এটি ইনস্ট্যান্ট করতে পছন্দ করেছি।
new
পাইপ আপ করবেন তখন আপনার লোকালটি ডিআই করতে হবে। পুরো @Inject(LOCALE_ID) private locale: string
সিনট্যাক্সটি আমার কাছে জটিল মনে হচ্ছে।
আপনি যদি আপনার উপাদানগুলিতে আপনার কাস্টম পাইপটি ব্যবহার করতে চান তবে আপনি যুক্ত করতে পারেন
@Injectable({
providedIn: 'root'
})
আপনার কাস্টম পাইপতে টিকা। তারপরে, আপনি এটি পরিষেবা হিসাবে ব্যবহার করতে পারেন
providedIn: 'root'
আমাদের নল ভিতরে বা স্থানীয় মডিউল যেখানে পাইপ ব্যবহার করা হয় প্রদান করা?
আপনি যদি 'নতুন মাইপাইপ ()' না করতে চান কারণ আপনি পাইপের উপর নির্ভরতা ইনজেকশন দিচ্ছেন, আপনি সরবরাহকারীর মতো উপাদান ইনজেকশন করতে পারেন এবং নতুন ছাড়া ব্যবহার করতে পারেন।
উদাহরণ:
// 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');
যদিও লোকেল সরবরাহ করতে হয়
আপনি পরিষেবাগুলিতে বা উপাদান টিএস-তে তারিখের বিন্যাস করতে ফর্ম্যাটডেট () ব্যবহার করতে পারেন। বাক্য গঠন:-
formatDate(value: string | number | Date, format: string, locale: string, timezone?: string): string
এর মতো সাধারণ মডিউল থেকে ফর্ম্যাটডেট () আমদানি করুন,
import { formatDate } from '@angular/common';
এবং ক্লাসে এটি এর মতো ব্যবহার করুন,
formatDate(new Date(), 'MMMM dd yyyy', 'en');
আপনি এর মতো কৌণিক দ্বারা সরবরাহিত পূর্বনির্ধারিত ফর্ম্যাট বিকল্পগুলিও ব্যবহার করতে পারেন,
formatDate(new Date(), 'shortDate', 'en');
আপনি এখানে অন্য সমস্ত পূর্বনির্ধারিত ফর্ম্যাট বিকল্প দেখতে পারেন,