У меня есть два компонента 1. Header Component
2. Result Component
В заголовке у меня есть строка поиска с нажатием кнопки, которую я хочу, чтобы результат отображался на странице результатов.
Вторая проблема однажды Я являюсь страницей результатов, если я ввожу значение поиска в поиск компонента заголовка, он не должен перезагружать страницу
И заголовок, и компоненты результата не связаны, поэтому я могу использовать @input
или output
, поправьте меня, если есть ли способ передать значение?
main.component. html
<app-header *ngIf="auth.isLoggednIn()"></app-header>
<router-outlet></router-outlet>
<app-footer></app-footer>
</div>
Header.component. html
<div class="container">
<ul>
<li routerLinkActive="active"><a routerLink="/statupdate">Status Update</a></li>
<li routerLinkActive="active"><a routerLink="/add">Add New</a></li>
<li routerLinkActive="active"><a routerLink="/projects">Opportunity</a></li>
</ul>
<form class="form-inline" [formGroup]="searchForm" (ngSubmit)="onSubmit()">
<input class="form-control mr-sm-2" type="search" placeholder="ClientName" aria-label="Search"
formControlName="searchText">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
</div>
</div>
Header.component.ts
this.router.navigate(['search'], {
queryParams: {
search: this.searchForm.value.searchText,
}
});
}
У меня есть все мои результаты из окна поиска для отображения на странице результатов, поэтому я использую маршрутизатор для навигации. Result component.ts
constructor(private route: ActivatedRoute,public projectService: ProjectService) { }
ngOnInit() {
this.projectService.list(this.route.snapshot.queryParamMap.get('search')).subscribe(
(resp) => {
this.list = resp;
},(err) => {
console.log(err);
}
)
}
Возможно ли заполнить данные без перезагрузки страницы? Я не могу найти пример этого
Обновление Я написал службу BehaviorSubject для решения этой проблемы
private messageSource = new BehaviorSubject(<any>[]);
currentMessage = this.messageSource.asObservable();
constructor(public httpClient: HttpService) { }
changeMessage(message) {
this.httpClient.get('project?clientName=' + message)
.subscribe(
(resp) => {
this.messageSource.next(resp);
}
)
}
, но хотел знать, могу ли я улучшить эта кодировка выглядит примерно так, если это возможно
changeMessage(message) {
let temp = this.httpClient.get('project?clientName=' + message)
this.messageSource.next(temp);
}
my Result.component.ts
ngOnInit() {
this.searchService.currentMessage.subscribe(
(message) => { console.log(message); this.message = message }, (err) => { console.log(err) })
}