Angular2: невозможно передать данные другому компоненту. Бэкэнд-сервис называется дважды
У меня есть требование, где ngOnInit
Я извлекаю параметры запроса из URL, готовлю URL для создания бэкенда api
назвать что-то вроде http://localhost:8080/myapp/video0=5&video1=6
и испускают данные, полученные для использования в другом компоненте.
Теперь, когда я просматриваю консоль браузера и вкладки сети, я вижу два вызова моего API api-интерфейса: один без параметров и один с параметрами. Очевидно, что один с параметрами выбирает мне нужные данные. это data
требуется в другом компоненте для дальнейшей обработки.
Вот как ngOnInit
выглядит как в одном компоненте:
ngOnInit() {
this.activatedRoute.queryParams.subscribe((params: Params) => {
this.video0 = params['video0'];
this.video1 = params['video1'];
this.video2 = params['video2'];
this.video3 = params['video3'];
this.sharedRequestPath = this.prepareSharedLinkRequestPath(this.video0,this.video1,this.video2,this.video3); // creates a url for fetching data.
this.getSharedVideosData(this.sharedRequestPath); //this makes the backend call.
this.addVideosEvent.emit(this.sharedVideos); //finally emitting the data populated in variable
});
}
Часть для извлечения данных из бэкэнда: getSharedVideoData
getSharedVideosData(requestPath) {
this.modelService.getVideos(requestPath).subscribe(
data => {
this.videoData = data;
for (let j = 0; j < this.videoData.length; j++) {
this.sharedVideos[j] = this.videoData[j];
}
});
}
getVideos
метод в modelService
является:
getVideos(videoDataQuery): Observable < MyObj[] > {
return this.http.get(videoDataQuery).map((response: Response) => {
return <MyObj[]> response.json()
}).catch(this.handleError);
}
И, наконец, событие эмиттера для другого компонента:
<app-form (addVideosEvent)="addVideos($event)" ></app-form>
addVideos
Метод используется для дальнейшей обработки данных, содержащих оператор оповещения. Когда страница загружается, я вижу два предупреждения, но оба без каких-либо данных.
Это странно, потому что вкладки сети браузера показывают мне ответ, но он не выдается должным образом, я думаю. Я делаю это правильно?
Как мне этого добиться?
2 ответа
Просто подпишитесь на эти данные в Компоненте и разместите их там, где вы хотите.
this.addVideosEvent.subscribe(yourEmittedData=>{
console.log( 'emittedData' , yourEmittedData )
)
Правильный синтаксис для подписки компонента: =>
this.addVideosEvent.subscribe(yourEmittedData=>{ console.log( 'emittedData' , yourEmittedData )
})
Правильный синтаксис для подписки на сервис: =>
myFunction(callback:(data:any)=>void){ this.addVideosEvent.subscribe((yourEmittedData:any)=>{ console.log( 'emittedData' , yourEmittedData ) callback(yourEmittedData);
})}