我想创建一个带输入过滤器的用户列表。 我的app.component.html是这样的:
<header>
<app-header></app-header>
</header>
<div class="col-md-3">
<app-left-menu></app-left-menu>
</div>
<div class="col-md-8">
<router-outlet></router-outlet>
</div>
标题就像
<div class="col-md-4">
<input type="text" [(ngModel)]="headerFilter">
</div>
如何在userList componentsnet中使用headerFilter?
我知道@Pipe并尝试:
管道
export class BuildPipe implements PipeTransform {
transform (values: any[], field: string, value: string): any[] {
if (!values || !values.length) {
return [];
}
if (!value) {
return values;
}
return values.filter(it => it[field].indexOf(value) >= 0 );
}
}
和UserList.componenet:
<div class="item" *ngFor="let user of users | build: 'firstname': filter">
但是如何将值从头输入传输到userList?
答案 0 :(得分:1)
如果组件之间存在父子关系,则可以使用@Input
装饰器。否则,请使用Services
或BehaviourSubject
。以下是基于优先级的方法:
答案 1 :(得分:0)
感谢所有答案!
最后我使用服务
import { Injectable } from '@angular/core';
@Injectable()
export class FilterService {
headerFilter: string;
constructor() { }
public getFilter(): string {
return this.headerFilter;
}
public setFilter(filter): void {
this.headerFilter = filter;
}
}
标题中的和搜索框组件
<div>
<input #input type="text" (input)="update(input.value)">
</div>
searchbox.ts
update (value) {
this.filter.setFilter(value);
}
并列出
<div class="item" *ngFor="let user of users | build: 'firstname': filterServ.getFilter()">
其中build是管道名称