Reputation: 33
In my attempts to implement a search and sort pipe functions for prepare searching feature in my ionic 3 projects to search in data comes from the database, I got an error I don't know why .. error like this :
core.js:1350 ERROR Error: Uncaught (in promise): Error: Template parses errors:
The pipe 'sort' could not be found ("
<div [ngSwitch]="pet">
<ion-list *ngSwitchCase="'users'">
<ion-item *ngFor="l[ERROR ->]et f of users | search : terms | sort: {property: column, order: order}">
<ion-thumbnail it"): ng:///SearchPageModule/SearchPage.html@32:27
The pipe 'search' could not be found ("
<div [ngSwitch]="pet">
<ion-list *ngSwitchCase="'users'">
<ion-item *ngFor="l[ERROR ->]et f of users | search : terms | sort: {property: column, order: order}">
<ion-thumbnail it"): ng:///SearchPageModule/SearchPage.html@32:27
The pipe 'sort' could not be found ("
<ion-list *ngSwitchCase="'places'">
<ion-item *ngFor="l[ERROR ->]et p of places | search : terms | sort: {property: column, order: order}">
<ion-thumbnail i"): ng:///SearchPageModule/SearchPage.html@62:27
The pipe 'search' could not be found ("
<ion-list *ngSwitchCase="'places'">
<ion-item *ngFor="l[ERROR ->]et p of places | search : terms | sort: {property: column, order: order}">
<ion-thumbnail i"): ng:///SearchPageModule/SearchPage.html@62:27
Error: Template parse errors:
The pipe 'sort' could not be found ("
<div [ngSwitch]="pet">
<ion-list *ngSwitchCase="'users'">
<ion-item *ngFor="l[ERROR ->]et f of users | search : terms | sort: {property: column, order: order}">
<ion-thumbnail it"): ng:///SearchPageModule/SearchPage.html@32:27
The pipe 'search' could not be found ("
<div [ngSwitch]="pet">
<ion-list *ngSwitchCase="'users'">
<ion-item *ngFor="l[ERROR ->]et f of users | search : terms | sort: {property: column, order: order}">
<ion-thumbnail it"): ng:///SearchPageModule/SearchPage.html@32:27
The pipe 'sort' could not be found ("
<ion-list *ngSwitchCase="'places'">
<ion-item *ngFor="l[ERROR ->]et p of places | search : terms | sort: {property: column, order: order}">
<ion-thumbnail i"): ng:///SearchPageModule/SearchPage.html@62:27
The pipe 'search' could not be found ("
<ion-list *ngSwitchCase="'places'">
<ion-item *ngFor="l[ERROR ->]et p of places | search : terms | sort: {property: column, order: order}">
<ion-thumbnail i"): ng:///SearchPageModule/SearchPage.html@62:27
at syntaxError (compiler.js:466)
at TemplateParser.parse (compiler.js:24329)
at JitCompiler._parseTemplate (compiler.js:33757)
at JitCompiler._compileTemplate (compiler.js:33732)
at compiler.js:33634
at Set.forEach (<anonymous>)
at JitCompiler._compileComponents (compiler.js:33634)
at compiler.js:33504
at Object.then (compiler.js:455)
at JitCompiler._compileModuleAndComponents (compiler.js:33503)
at syntaxError (compiler.js:466)
at TemplateParser.parse (compiler.js:24329)
at JitCompiler._parseTemplate (compiler.js:33757)
at JitCompiler._compileTemplate (compiler.js:33732)
at compiler.js:33634
at Set.forEach (<anonymous>)
at JitCompiler._compileComponents (compiler.js:33634)
at compiler.js:33504
at Object.then (compiler.js:455)
at JitCompiler._compileModuleAndComponents (compiler.js:33503)
at c (polyfills.js:3)
at c (polyfills.js:3)
at polyfills.js:3
at t.invokeTask (polyfills.js:3)
at Object.onInvokeTask (core.js:4620)
at t.invokeTask (polyfills.js:3)
at r.runTask (polyfills.js:3)
at o (polyfills.js:3)
at <anonymous>
the code in the page.html is :
<ion-searchbar [(ngModel)]="terms"></ion-searchbar>
<button ion-button type="button" (click)="sort()">Sort</button>
<div [ngSwitch]="pet">
<ion-list *ngSwitchCase="'users'">
<ion-item *ngFor="let f of users | search : terms | sort: {property: column, order: order}">
<ion-thumbnail item-start>
<img [src]="f.image"/>
</ion-thumbnail>
<h2>{{f.name}}</h2>
</ion-item>
</ion-list>
the code in the page.ts is :
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { HttpClient } from '@angular/common/http';
import { SearchPipe } from '../../pipes/search/search';
import { SortPipe } from '../../pipes/sort/sort';
@IonicPage()
@Component({
selector: 'page-search',
templateUrl: 'search.html',
})
export class SearchPage {
descending: boolean = false;
order: number;
column: string = 'name';
users : any ;
places : any ;
constructor(public navCtrl: NavController, public navParams: NavParams , public http: HttpClient) {
//this.initializeItems();
}
ngOnInit(){
this.http.get("http://localhost/Test1/getCity.php?action=getFriends")
.subscribe( data =>{
this.users = data['friends']
console.log(this.users)
});
this.http.get("http://localhost/Test1/getCity.php?action=getDetail")
.subscribe( data =>{
this.places = data['detail']
console.log(this.places)
});
}
sort(){
this.descending = !this.descending;
this.order = this.descending ? 1 : -1;
}
}
and in the app.module.ts there :
import { SearchPipe } from '../pipes/search/search';
import { SortPipe } from '../pipes/sort/sort';
@NgModule({
declarations: [
MyApp,
TulkarmPage,
CatDetailsPage,
ModalsPage,
DetailsPage,
SearchPipe,
SortPipe
],
and I will include the pipes.ts coding :
first : searc.ts pipe :
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'search',
})
export class SearchPipe implements PipeTransform {
transform(items: any[], terms: string): any[] {
if(!items) return [];
if(!terms) return items;
terms = terms.toLowerCase();
return items.filter( it => {
return it.name.toLowerCase().includes(terms); // only filter country name
});
}
}
second : sort.ts code
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'sort',
})
export class SortPipe implements PipeTransform {
transform(array: Array<string>, args?: any): Array<string> {
return array.sort(function(a, b){
if(a[args.property] < b[args.property]){
return -1 * args.order;
}
else if( a[args.property] > b[args.property]){
return 1 * args.order;
}
else{
return 0;
}
});
}
}
** please, before your judgment on the question that its Duplicated, I hope you first read the question completely and give me an obvious answer or a solution for this error, I know that there is a question maybe liken it but really I don't have a solution for my issue**
Thanks to all
Upvotes: 2
Views: 574
Reputation: 3166
When you want to use any components/Pipes in any other modules than the one in which they are declared, you should export them.
Now, in your case, you don't want to just export them from the AppModule, since it's a not a good idea to export from the AppModule
Create a module called PipesModule
instead
import { SearchPipe } from '../pipes/search/search';
import { SortPipe } from '../pipes/sort/sort';
import { CommonModule } from '@angular/common';
@NgModule({
imports: [CommonModule],
declarations: [SearchPipe, SortPipe],
exports: [SearchPipe, SortPipe]
})
export class PipesModule
Import this module in whichever modules you want to use the pipes in,
app.module.ts
import { PipesModule } from '../pipes/pipes.module';
@NgModule({
imports: [.., PipesModule],
declarations: [
MyApp,
TulkarmPage,
CatDetailsPage,
ModalsPage,
DetailsPage,
],
}
Upvotes: 2
Reputation:
Your problem is, that Pipes are not exported from one module to the other, even if moduleB is imported in moduleA.
As I can see you use a SearchPageModule and here the error occurred. You have to declare your Pipes inside this module instead of putting them into your AppModule, in order to have them work.
PS: It is good practice to create a PipesModule and declare + export all your shared pipes there. Then you only have to import this Module in the corresponding module where you need the pipes.
Upvotes: 0