【发布时间】:2020-02-16 14:04:01
【问题描述】:
我有两个组件
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,
}
});
}
我将搜索框中的所有结果都显示在结果页面上,因此我使用路由器进行导航。 结果组件.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);
}
我的Result.component.ts
ngOnInit() {
this.searchService.currentMessage.subscribe(
(message) => { console.log(message); this.message = message }, (err) => { console.log(err) })
}
【问题讨论】: