Lets say we want to filter through a list of jobs that look like the following using an Angular 4.4.5 setup.
job-state.ts
export interface JobState {
id: number;
title: string;
company: string;
city: string;
state: string;
zip: number;
}
![]()
We need to create a custom pipe that takes in the search term as an input parameter for this.
search-jobs.pipe.ts
import {Pipe, PipeTransform} from '@angular/core';
import {JobState} from './job-state';
@Pipe({
name: 'searchJobs'
})
export class SearchJobsPipe implements PipeTransform {
transform(jobs: JobState[], searchText: string): any[] {
if (!jobs) {
return [];
}
if (!searchText) {
return jobs;
}
searchText = searchText.toLowerCase();
return jobs.filter(it => {
return it.title.toLowerCase().includes(searchText) ||
it.company.toLowerCase().includes(searchText) || it.city.toLowerCase().includes(searchText) ||
it.state.toLowerCase().includes(searchText) || it.zip.toString().toLowerCase().includes(searchText);
});
}
}
app.module.ts
Now add this app.module.ts to the Declarations part of NgModule, after including the AppComponent where you wish to use this.
// ...
import {AppComponent} from './app.component';
import {SearchJobsPipe} from './search-jobs.pipe';
@NgModule({
//
...
declarations: [ AppComponent,
SearchJobsPipe
],
// ....
}]
app.component.ts
Make sure you have app.component.ts that is somewhat similar to the base structure here.
import { Component, OnInit } from '@angular/core';
import {JobState} from './job-state';
@Component({
selector: 'app-app1',
templateUrl: './app1.component.html',
styleUrls: ['./app1.component.scss']
})
export class App1Component implements OnInit {
jobSearch = '';
jobs: JobState[];
constructor() { }
ngOnInit() {
this.getJobs();
}
getJobs(): void {
// Make API call here and load the jobs on success
// this.jobs = response.data;
}
}
app.component.html
Now add the following code into your app.component.html file or your components template.
{{job.title}} - {{job.company}}{{job.city}}, {{job.state}} - {{job.zip}}