Я довольно долго пытался понять, как подписаться на массив, значения которого постоянно обновляются.
Мне нужно понять, как правильно настроить наблюдаемую службу Angular 2+ и правильно подписаться на нее в моем компоненте. Предположим, что все остальные части кода работают правильно.
@Injectable()
export class AutocompleteService {
searchTerm: string;
results = [];
observe$ = Observable.from(this.results);
searchTest(term){
this.searchTerm = term.toLowerCase();
if(this.searchTerm.length > 2){
this.recruiters.forEach(function(el){
if(el.name.toLowerCase().indexOf(term) != -1) {
this.results.push(el);
}
});
}
}
getCurrentResults():Observable<Object> {
return this.observe$;
}
В сервисе все работает как положено. Если я регистрирую term
, я получаю пользовательский ввод от моего компонента. Или массив results
после сопоставления результатов поиска помещается в него.
@Component({
selector: 'autocomplete',
templateUrl: './autocomplete.component.html',
providers: [AutocompleteService]
})
export class AutocompleteComponent implements OnInit{
constructor(private autocompleteService: AutocompleteService){}
value: string = '';
searchControl = new FormControl();
// fired when input happens
getResults(event){
this.autocompleteService.searchTest(event.target.value);
this.autocompleteService.getCurrentResults().subscribe(
value => console.log(value)
);
}
Я настроил наблюдаемый шаблон в меру своих возможностей, но ничего не получаю из .subscribe в getResults