【发布时间】:2018-03-11 08:58:41
【问题描述】:
在 Angular 2 应用程序中,我有一个 HTML 搜索输入,我想将其值发送给 3 个子组件,前提是用户停止输入 300 毫秒并且他输入的内容与输入所包含的内容不同。我在网上看了一些文章,都提到了Subject、debounceTime和distinctUntilChanged运算符的使用。按照其中一个教程,我最终得到了以下代码:
父组件:
// Subject to emit an observable
public searchUpdated: Subject <string> = new Subject<string>();
@Output() searchChangeEmitter: EventEmitter <any> = new EventEmitter <any>();
constructor() {
[.......]
this.searchChangeEmitter = <any>this.searchUpdated.asObservable()
.debounceTime(300)
.distinctUntilChanged(); // accept only relevant chars
}
onSearchType(value : string) {
this.searchUpdated.next(value); // Emit the changed value to the subscribers
}
父模板:
<input class="input-group-field" type="search" id="inputSearch" name="inputSearch" (keyup)="onSearchType($event.target.value)">
我想将发出的值传递给子组件,但我感觉有点失落。我试过了,但没有用:
父模板
<app-object-tree [searchFilter]="searchChangeEmitter"></app-object-tree>
(并且,在子组件 'app-object-tree' 中,创建 @Input 'searchFilter' 并订阅它以尝试获取值。)
创建一个服务,在父组件中提供它并在子组件上订阅它对我来说更有意义,但是我不知道在应用“debounceTime”后如何调用服务“setter”函数和“distinctUntilChanged”操作。
非常感谢,如果我没有正确解释自己,我很抱歉,我仍在努力将所有主题/可观察的概念联系起来。
【问题讨论】:
标签: javascript angular rxjs angular2-observables