В приложении 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 и подпишитесь на него, чтобы попытаться получить значение.)
Для меня имеет смысл создать службу, предоставить ее в родительском компоненте и подписаться на нее в дочерних компонентах, но я не знаю, как вызвать функцию 'setter' службы после применения 'debounceTime' и 'independentUntilChanged 'операции.
Большое спасибо, и извините, если я не объяснил себя правильно, я все еще пытаюсь связать все концепции Subject / Observable в моем сознании.