I am implementing search functionality in Angular. I am displaying details from an array into a div. What I want is to display only those details whose name I type in searchbox. I am trying filter method on array and this is what I have tried:
Component.ts:
import { Component, OnInit } from '@angular/core';
import { Employee } from '../Employee';
import {NgModule} from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
@Component({
selector: 'app-employee-list',
templateUrl: './employee-list.component.html',
styleUrls: ['./employee-list.component.css']
})
export class EmployeeListComponent implements OnInit {
constructor() { }
ngOnInit(): void {
}
filteredEmployees:Employee[]=[]
searchText=""
employeeList:Employee[]=
[
{
id:1,
name:"abc def",
salary:20000,
permanent:true,
department:{id:1, name:"Payroll"},
skill:[{id:1 , value:"HTML"},{id:2 , value:"CSS"},{id:1 , value:"JS"}],
dateOfBirth:new Date('01/03/2002')
},
{
id:1,
name:"ssss gggg",
salary:40000,
permanent:false,
department:{id:2, name:"Internal"},
skill:[{id:1 , value:"HTML"},{id:2 , value:"CSS"},{id:1 , value:"JS"}],
dateOfBirth:new Date('21/03/2006')
},
{
id:1,
name:"asdf zxcv",
salary:60000,
permanent:true,
department:{id:3, name:"HR"},
skill:[{id:1 , value:"HTML"},{id:2 , value:"CSS"},{id:1 , value:"JS"}],
dateOfBirth:new Date('16/05/2010')
}
];
searchKey(data:string)
{
this.searchText=data;
}
search()
{
this.filteredEmployees = this.employeeList.filter((element)=>{
return element.name.toLowerCase()==this.searchText.toLowerCase();
});
}
}
This is my html file:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<b>Employees List</b>
<br>
<br>
<div class="form-group">
<label for="search">Search</label>
<input type="text" (keyup)="search()" id="search" [(ngModel)]="searchKey(searchText)" placeholder="Find by name" ngModel>
</div>
<div class="row" *ngFor="let e of employeeList">
<div class="block" style="width:300px;height:100px;border:1px solid #000;">
<h4>{{e.name}}</h4>
<h6>₹ {{e.salary}}</h6>
<app-employee-info></app-employee-info>
</div>
<br>
<br>
</div>
</body>
</html>
I am trying to two way bind searchKey with search text box and its keyup event should call the search function.
search then filters based on the input.
But I get this error :
Unexpected token '=' at column 22 in [searchKey(searchText)=$event]
Also one more thing ::How do I connect my display div to my search box so that it only displays based on the filtered results??
[(ngModel)]="searchText"or[ngModel]="searchText" (ngModelChange)="searchKey($event)"?<div class="row" *ngFor="let e of filteredEmployees">to show filtered employees. And update search method to return all employees if search is empty.