Di AngularJS, saya dapat menggunakan filter (pipa) di dalam layanan dan pengontrol menggunakan sintaksis yang mirip dengan ini:
$filter('date')(myDate, 'yyyy-MM-dd');
Apakah mungkin menggunakan pipa dalam layanan / komponen seperti ini di Angular?
Jawaban:
Seperti biasa di Angular, Anda dapat mengandalkan injeksi ketergantungan:
Tambahkan
DatePipe
ke daftar penyedia Anda di modul Anda; jika Anda lupa melakukan ini, Anda akan mendapatkan kesalahanno provider for DatePipe
:Perbarui Angular 6 : Angular 6 sekarang menawarkan hampir semua fungsi pemformatan yang digunakan oleh pipa secara publik. Misalnya, Anda sekarang dapat menggunakan
formatDate
fungsi secara langsung.Sebelum Angular 5 : Berhati-hatilah karena
DatePipe
ia mengandalkan API Intl hingga versi 5, yang tidak didukung oleh semua browser (periksa tabel kompatibilitasnya ).Jika Anda menggunakan versi Angular yang lebih lama, Anda harus menambahkan
Intl
polyfill ke proyek Anda untuk menghindari masalah. Lihat pertanyaan terkait ini untuk jawaban yang lebih terperinci.sumber
Jawaban ini sekarang sudah usang
merekomendasikan menggunakan pendekatan DI dari jawaban lain alih-alih pendekatan ini
Jawaban asli:
Anda harus dapat menggunakan kelas secara langsung
Misalnya
sumber
Date
konstruktor javascript , bulan0
didasarkan. Begitu0
juga Januari dan1
Februari. Hilang dikoreksiy
error TS2345: Argument of type 'string[]' is not assignable to parameter of type 'string'.
onlinevar formatted = new DatePipe().transform(raw, ['yyyy-MM-dd']);
@NgModule({ providers:[DatePipe] })
lalu di kelas Anda, impor dan suntikkanconstructor( private datePipe: DatePipe ){}
Ya, itu mungkin dengan menggunakan pipa kustom sederhana. Keuntungan menggunakan pipa kustom adalah jika kita perlu memperbarui format tanggal di masa depan, kita dapat pergi dan memperbarui satu file.
Sebagai contoh
Jangan lupa untuk mengimpor dependensi.
Contoh Pipa Kustom dan info lainnya
sumber
Jawaban lain tidak bekerja di sudut 5?
Saya mendapat kesalahan karena DatePipe bukan penyedia, jadi tidak bisa disuntikkan. Salah satu solusinya adalah dengan menempatkannya sebagai penyedia dalam modul aplikasi Anda, tetapi solusi pilihan saya adalah dengan instantiate.
Instantiate itu di mana diperlukan:
Saya melihat kode sumber DatePipe untuk melihat bagaimana ia mendapatkan lokal: https://github.com/angular/angular/blob/5.2.5/packages/common/src/pipes/date_pipe.ts#L15-L174
Saya ingin menggunakannya di dalam pipa, jadi contoh saya adalah di dalam pipa lain:
Kuncinya di sini adalah mengimpor Suntikan, dan LOCALE_ID dari inti sudut, dan kemudian menyuntikkannya sehingga Anda dapat memberikannya ke DatePipe untuk membuat instantiate dengan benar.
Jadikan DatePipe sebagai penyedia
Di modul aplikasi Anda, Anda juga bisa menambahkan DatePipe ke array penyedia Anda seperti ini:
Sekarang Anda bisa menyuntikkannya ke konstruktor di mana diperlukan (seperti dalam jawaban cexbrayat).
Ringkasan:
Salah satu solusi yang berhasil, saya tidak tahu yang mana sudut akan dianggap paling "benar" tetapi saya memilih untuk instantiate secara manual karena sudut tidak menyediakan datepipe sebagai penyedia itu sendiri.
sumber
new
menaiki pipa, Anda masih harus DI lokal. Saya menemukan seluruh@Inject(LOCALE_ID) private locale: string
sintaksnya rumit.Jika Anda tidak ingin melakukan 'myPipe baru ()' karena Anda menyuntikkan dependensi ke pipa, Anda dapat menyuntikkan komponen seperti penyedia dan digunakan tanpa yang baru.
Contoh:
sumber
Jika Anda ingin menggunakan pipa kustom di komponen Anda, Anda dapat menambahkan
penjelasan untuk pipa kustom Anda. Kemudian, Anda dapat menggunakannya sebagai layanan
sumber
providedIn: 'root'
berada di dalam pipa kami atau disediakan dalam modul lokal di mana pipa digunakan?Pada Angular 6 Anda dapat mengimpor
formatDate
dari@angular/common
utilitas untuk digunakan di dalam komponen.Itu diterobos di https://github.com/smdunn/angular/commit/3adeb0d96344c15201f7f1a0fae7e533a408e4ae
Saya dapat digunakan sebagai:
Meskipun lokal harus disediakan
sumber
Anda dapat menggunakan formatDate () untuk memformat tanggal di layanan atau komponen ts. sintaksis:-
impor formatDate () dari modul umum seperti ini,
dan gunakan saja di kelas seperti ini,
Anda juga dapat menggunakan opsi format yang disediakan oleh sudut seperti ini,
Anda dapat melihat semua opsi format yang telah ditentukan di sini,
sumber