Есть некоторые фундаментальные проблемы с вашим кодом.
1) Существует несколько опечаток, а именно такие методы, как ваш метод обслуживания (search
или searchMedPolicies
?)
2) Вы не импортировали и не инициализировали formGroup
внутри вашего компонента.
3) То, как вы обрабатываете свои подписки в своем компоненте - нет необходимости добавлять инструкцию возврата в вашу подписку.
Что касается события вашей подписки, вы можете простопередать событие click вашему субъекту , используя next()
.
Затем вы подписываетесь на свой clickStream$
субъект и делаете необходимые HTTP-запросы.
Вот моирекомендуемые исправления.
<form [formGroup]="searchForm">
<input
formControlName="queryString"
placeholder="Enter keyword"
type="text"
(keyup.enter)="onSearch()"
>
<div (click)="onSearch($event)"></div>
</form>
И на ваших component.ts,
import { Component, OnInit } from '@angular/core';
import { FormBuilder } from '@angular/forms';
import { Subject } from 'rxjs';
import { switchMap } from 'rxjs/operators';
// other imports
@Component({
// etc etc
})
export class YourComponent implements OnInit {
clickStream$ = new Subject<Event>();
searchForm = this.fb.group({
queryString: '',
})
constructor(
private fb: FormBuilder,
private myService: SearchService,
) { }
ngOnInit() {
this.clickStream$
.pipe(
switchMap((event) => {
const { queryString } = this.searchForm.value;
// console.log(event);
// console.log(queryString);
return this.myService.search(queryString)
}),
).subscribe(response => {
console.log(response);
// do the rest
});
}
onSearch() {
this.clickStream$.next(event);
}
}
И на вашем service.ts убедитесь, что имена методов тоже совпадают.
export class SearchService {
constructor(private http: HttpClient) {}
search(queryString: string) {
if (!queryString) {
return;
}
return this.http.get(`${this.BASE_URL}&q=${queryString}`);
}
}