问题
ngFor filtering based on a search using pipe - This is working fine ,
Now I have to add ngIf condition based on the search query
If nothing result then I have to show another new div with 'no data' text
<input type="text" [(ngModel)]="queryString" placeholder="Search to type">
<li *ngFor="let project of projects | FilterPipe: queryString ;>
{{project.project_name}}
</li>
//pipe
transform(value: any, input:any ): any {
if(input){
input = input.toLowerCase();
return value.filter(function (el: any) {
return el.project_name.toLowerCase().indexOf(input) > -1;
})
}
return value;
}
回答1:
To use the results of the filter
pipe in the template, you can create a local variable with the help of the as
keyword.
<li *ngFor="let project of (projects | FilterPipe: queryString) as results">
{{project.project_name}}
</li>
Now you can access the results from your filter pipe in the results
variable. But the scope of this local variable is now limited to the hosting HTML element and its children. We can fix this by rewriting your code a little.
<ul *ngIf="(projects | FilterPipe: searchQuery) as results">
<li *ngFor="let project of results">
{{project.project_name}}
</li>
<span *ngIf="results.length === 0">No data</span>
</ul>
This way we have expanded the scope of the results
variable and we can easily use it to display No Data
when the filtered dataset is empty.
Here is a working example on StackBlitz.
来源:https://stackoverflow.com/questions/57285679/angular-ngfor-ngif-condition-in-data-filtering-by-pipe