基本上,您需要在两个组件之间共享数据(filters),因为filtered-users 和filters 是您项目中的两个组件。
因此,要在两个components(没有parent-child 关系)之间共享data,我们可以使用observables。
您可以创建一个名为 FilterService 的服务,在其中,您可以拥有一个 observable(过滤器)
@Injectable()
export class FilterService {
private filters = new Subject<{}>(); // creating a subject
filters$ = this.filters.asObservable(); // creating an observable
alertFilter(key: string, value: string) {
this.filters.next({ key, value }); // publishing the new fliter to the subscribers
}
}
并将这个service 添加到filtered-users、filters 组件到dependency-injection。并在用户选中过滤器复选框时从filters 组件调用FilterService 的alertFilter() 方法。
在 filter.component.html
<input (change)="onCheck('gender', opt)"
在 filter.component.ts 中
onCheck(key: string, value: string) {
this.filterService.alertFilter(key, value);
}
在此之后,订阅FilterService 中的observable(过滤器)filtered-users-component。
在过滤用户.component.ts 中
constructor(
private sortingService: SortingService,
private userService: UserService,
private filterService: FilterService
) {
this.filterService.filters$.subscribe({
next: filter => {
this.filteredUsers = this.filteredUsers.filter(user => {
return user[filter['key']] === filter['value'];
});
}
});
}
this.filterService.filters$.subscribe() 将在添加新过滤器时执行,因此,使用过滤器变量您可以相应地过滤用户。