검색 양식과 결과 표시가있는 Angular 2 응용 프로그램을 같은 페이지에 구축하고 있습니다. 라우팅을 사용하여 결과 섹션을 표시했습니다. 따라서 부모 구성 요소는 여러 필드가있는 검색 양식이며 하위 구성 요소는 백엔드에서 결과를 얻고 표시합니다.부모로부터 자식으로 두 번 이상 데이터를 전달하는 방법
검색 기준에 여러 필드가 포함되어 있으므로 검색 기준을 공유 서비스를 통해 하위 구성 요소에 전달하고 있습니다.
부모 요소 :
@Component({
templateUrl : 'app/search-form.template.html'
})
export class SearchFormComponent {
constructor(private searchService : SearchService,
private router: Router){}
submitSearch(){
this.searchService.setSearchCriteria(this.model);
this.router.navigate(['search-form/search-result']);
}
하위 구성 요소 :
@Injectable()
export class SearchService{
constructor (private http: Http) {}
setSearchCriteria(searchCriteria : SearchCriteria){
this.searchCriteria = searchCriteria;
}
getSearchResult() : Observable<any> {
let body = JSON.stringify(this.searchCriteria);
let headers = new Headers({'content-type' : 'application/json'});
let options = new RequestOptions({headers : headers});
return this.http.post(this.baseUrl , body, options)
.map((res: Response) => res.json().root || {});
}
부모와 자식이 라우팅을 사용하여로드됩니다 여기
@Component({
templateUrl: 'app/search-result/search-result.template.html'
})
export class SearchResultComponent implements OnInit{
private searchResult = [] ;
constructor(private searchService: SearchService) { }
ngOnInit() {
this.searchService.getSearchResult().subscribe(data => {
this.searchResult = data;
});
}
서비스 코드입니다. 여기에 라우팅 정보가 있습니다
const appRoutes : Routes = [
{
path: '',
redirectTo: '/search-form',
pathMatch: 'full'
},
{
path: 'search-form', component: SearchFormComponent,
children: [
{ path: ''},
{ path: 'search-result', component: SearchResultComponent }
]
}
];
main.html이 같은 모양입니다. 여기에 검색 양식 (부모) '검색 양식'
<nav class="navbar" >
<div class="container-fluid">
<router-outlet></router-outlet>
</div>
</nav>
검색 form.template.html 부모의 submitSearch() 메소드가 부모로부터 제출 양식이라고
<form #searchForm="ngForm" class="form-horizontal" (ngSubmit)="submitSearch()">
<!-- form fields -->
<button type="submit" class="btn btn-sm btn-primary pull-right">Submit</button>
<div class="panel panel-primary">
<!-- Search Result here -->
<router-outlet></router-outlet>
</div>
을 니펫을 렌더링 . 하위 구성 요소로 이동하여 searchResult를 표시합니다. 지금까지는 잘 작동합니다.
내가 원하는 것은 사용자가 화면에서 검색 기준을 변경하고 제출 버튼을 다시 눌러야한다는 것입니다. submitSearch() 메서드가 호출되었지만 하위 구성 요소의 결과가 업데이트되지 않습니다. 자식 구성 요소가 ngOnInit 메서드에서 서비스를 호출하기 때문에 루트가 원인이라고 생각합니다. 결과를 표시 한 후에 동일한 페이지에 있으므로 제출 단추를 다시 눌러도 하위 구성 요소가 다시 작성되지 않으므로 데이터가 새로 고쳐지지 않습니다.
상위 구성 요소에서 제출할 때 어떻게 새 searchResult를 사용하여 하위를 다시로드 할 수 있습니까?
check this out이 쇼에 좀 더 세부 사항을 추가 할 수 있습니다, 검색 방법보다 약
Subject
를 들어 약속를 반환 할 수 있습니다 내비게이션 – mehta