Sepertinya saya tidak bisa memperbaiki kesalahan ini. Saya memiliki bilah pencarian dan ngFor. Saya mencoba memfilter array menggunakan pipa khusus seperti ini:
import { Pipe, PipeTransform } from '@angular/core';
import { User } from '../user/user';
@Pipe({
name: 'usersPipe',
pure: false
})
export class UsersPipe implements PipeTransform {
transform(users: User [], searchTerm: string) {
return users.filter(user => user.name.indexOf(searchTerm) !== -1);
}
}
Pemakaian:
<input [(ngModel)]="searchTerm" type="text" placeholder="Search users">
<div *ngFor="let user of (users | usersPipe:searchTerm)">
...
</div>
Kesalahan:
zone.js:478 Unhandled Promise rejection: Template parse errors:
The pipe 'usersPipe' could not be found ("
<div class="row">
<div
[ERROR ->]*ngFor="let user of (user | usersPipe:searchTerm)">
Versi sudut:
"@angular/common": "2.0.0-rc.5",
"@angular/compiler": "2.0.0-rc.5",
"@angular/core": "2.0.0-rc.5",
"@angular/platform-browser": "2.0.0-rc.5",
"@angular/platform-browser-dynamic": "2.0.0-rc.5",
"@angular/router": "3.0.0-rc.1",
"@angular/forms": "0.3.0",
"@angular/http": "2.0.0-rc.5",
"es6-shim": "^0.35.0",
"reflect-metadata": "0.1.3",
"rxjs": "5.0.0-beta.6",
"systemjs": "0.19.26",
"bootstrap": "^3.3.6",
"zone.js": "^0.6.12"
angular
angular2-forms
angular2-pipe
Sumama Waheed
sumber
sumber
Jawaban:
Pastikan Anda tidak menghadapi masalah "modul silang"
Jika komponen yang menggunakan pipa, bukan milik modul yang telah mendeklarasikan komponen pipa "secara global" maka pipa tidak ditemukan dan Anda mendapatkan pesan kesalahan ini.
Dalam kasus saya, saya telah mendeklarasikan pipa dalam modul terpisah dan mengimpor modul pipa ini ke modul lain yang memiliki komponen menggunakan pipa.
Saya telah menyatakan bahwa komponen yang Anda gunakan adalah pipa
Modul Pipa
Penggunaan di modul lain (mis. App.module)
sumber
Anda perlu menyertakan pipa Anda dalam deklarasi modul:
sumber
You must include your pipe in the declarations array of the AppModule.
: angular.io/guide/pipes . Bagaimanapun, jawaban Anda juga memperbaiki masalah saya.exports: [UsersPipe]
jika modul tersebut akan diimpor oleh modul lain.Untuk Ionic, Anda dapat menghadapi banyak masalah seperti yang disebutkan @Karl. Solusi yang bekerja dengan sempurna untuk halaman ionik yang lambat dimuat adalah:
// pipe.ts content (bisa memiliki banyak pipa di dalamnya, ingat saja
// konten pipa.module.ts
Sertakan PipesModule ke bagian impor app.module dan @NgModule
import { PipesModule } from "../pipes/pipes.module"; @NgModule({ imports: [ PipesModule ] });
Sertakan PipesModule di setiap .module.ts tempat Anda ingin menggunakan pipa kustom. Jangan lupa untuk menambahkannya ke bagian impor. // Contoh. file: pages / my-custom-page / my-custom-page.module.ts
import { PipesModule } from "../../pipes/pipes.module"; @NgModule({ imports: [ PipesModule ] })
Itu dia. Sekarang Anda dapat menggunakan pipa kustom Anda di template Anda. Ex.
<div *ngFor="let prop of myObject | toArray">{{ prop.key }}</div>
sumber
Saya menemukan jawaban "modul silang" di atas sangat membantu situasi saya, tetapi saya ingin memperluasnya, karena ada masalah lain yang perlu dipertimbangkan. Jika Anda memiliki submodul, ia juga tidak dapat melihat pipa di modul induk dalam pengujian saya. Untuk alasan itu juga, Anda mungkin perlu memasang pipa ke modul terpisah di sana.
Berikut ringkasan langkah-langkah yang saya lakukan untuk mengatasi pipa yang tidak terlihat di submodule:
Catatan kaki lain untuk jawaban "modul silang" di atas: ketika saya membuat PipeModule saya menghapus metode statis forRoot dan mengimpor PipeModule tanpa itu di modul bersama saya. Pemahaman dasar saya adalah bahwa forRoot berguna untuk skenario seperti lajang, yang tidak berlaku untuk filter.
sumber
Menyarankan jawaban alternatif di sini:
Membuat modul terpisah untuk Pipa tidak diperlukan , tetapi jelas merupakan alternatif. Periksa catatan kaki dokumen resmi: https://angular.io/guide/pipes#custom-pipes
Yang harus Anda lakukan adalah menambahkan pipa Anda ke array deklarasi , dan array provider di
module
tempat Anda ingin menggunakan Pipe.sumber
Catatan : Hanya jika Anda tidak menggunakan modul sudut
Untuk beberapa alasan ini tidak ada di dokumen tetapi saya harus mengimpor pipa kustom di komponen
sumber
sumber
Saya telah membuat modul untuk pipa di direktori yang sama di mana pipa saya berada
Sekarang impor modul itu di app.module:
Sekarang dapat digunakan dengan mengimpor yang sama di modul bersarang
sumber