Não consigo consertar esse erro. Eu tenho uma barra de pesquisa e um ngFor. Estou tentando filtrar a matriz usando um tubo personalizado como este:
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);
}
}
Uso:
<input [(ngModel)]="searchTerm" type="text" placeholder="Search users">
<div *ngFor="let user of (users | usersPipe:searchTerm)">
...
</div>
Erro:
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)">
Versões angulares:
"@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
fonte
fonte
Respostas:
Certifique-se de não estar enfrentando um problema de "módulo cruzado"
Se o componente que está usando o pipe não pertencer ao módulo que declarou o componente do pipe "globalmente", então o pipe não foi encontrado e você receberá esta mensagem de erro.
No meu caso, declarei o tubo em um módulo separado e importei esse módulo de tubo em qualquer outro módulo com componentes que usam o tubo.
Eu declarei que o componente no qual você está usando o tubo é
o Módulo de Tubulação
Uso em outro módulo (por exemplo, app.module)
fonte
Você precisa incluir seu tubo na declaração do módulo:
fonte
You must include your pipe in the declarations array of the AppModule.
: angular.io/guide/pipes . Enfim, sua resposta também resolve meu problema.exports: [UsersPipe]
se o módulo for importado por outros módulos.No Ionic, você pode enfrentar vários problemas, como @Karl mencionou. A solução que funciona perfeitamente para páginas iônicas de carregamento lento é:
// conteúdo de pipes.ts (pode ter vários tubos dentro, lembre-se de
// conteúdo de pipes.module.ts
Incluir PipesModule na seção de importações app.module e @NgModule
import { PipesModule } from "../pipes/pipes.module"; @NgModule({ imports: [ PipesModule ] });
Inclua PipesModule em cada um de seus .module.ts onde deseja usar tubos personalizados. Não se esqueça de adicioná-lo na seção de importações. // Exemplo. arquivo: pages / my-custom-page / my-custom-page.module.ts
import { PipesModule } from "../../pipes/pipes.module"; @NgModule({ imports: [ PipesModule ] })
É isso aí. Agora você pode usar seu tubo personalizado em seu modelo. Ex.
<div *ngFor="let prop of myObject | toArray">{{ prop.key }}</div>
fonte
Achei a resposta "módulo cruzado" acima muito útil para minha situação, mas gostaria de expandir isso, pois há outra questão a considerar. Se você tiver um submódulo, ele também não poderá ver os tubos no módulo pai em meus testes. Por esse motivo também, você pode precisar colocar tubos em seu próprio módulo separado.
Aqui está um resumo das etapas que executei para resolver os canos que não eram visíveis no submódulo:
Outra nota de rodapé para a resposta do "módulo cruzado" acima: quando criei o PipeModule, removi o método estático forRoot e importei o PipeModule sem isso no meu módulo compartilhado. Meu entendimento básico é que forRoot é útil para cenários como singletons, que não se aplicam necessariamente a filtros.
fonte
Sugerindo uma resposta alternativa aqui:
Não é necessário fazer um módulo separado para o Pipe , mas é definitivamente uma alternativa. Verifique a nota de rodapé da documentação oficial: https://angular.io/guide/pipes#custom-pipes
Tudo que você precisa fazer é adicionar seu pipe ao array de declarações e o array de fornecedores
module
onde deseja usar o Pipe.fonte
Nota : Somente se você não estiver usando módulos angulares
Por algum motivo, isso não está nos documentos, mas tive que importar o canal personalizado no componente
fonte
fonte
Eu criei um módulo para tubos no mesmo diretório onde meus tubos estão presentes
Agora importe esse módulo em app.module:
Agora ele pode ser usado importando o mesmo no módulo aninhado
fonte