У меня есть родительский компонент, как это:@Input с обещанием Angular2
import { Component } from '@angular/core';
import { UrlService } from '../../services/url.service';
@Component({
selector: 'wrapPost',
templateUrl: './app/html/wrapPost.component.html',
})
export class WrapPost {
dataPost: any;
url: string;
constructor(private urlService: UrlService) {}
ngOnInit(){
let url = window.location.pathname;
this.urlService.getData(url)
.then(res => this.dataPost = res);
}
}
есть получите даты от сервера и возврата this.dataPost. Это хорошо работает.
Этот HTML-родителя templateUrl: './app/html/wrapPost.component.html'
<div class="noteCommonAlign">
<navigation></navigation>
<posts [dataPost]="dataPost"></posts>
<loading class="noteCommonAlign"></loading>
<pagination [dataPost]="dataPost"></pagination>
</div>
Далее компонентной пагинация (ребенок)
import { Component, Input, SimpleChanges } from '@angular/core';
@Component({
selector: 'pagination',
templateUrl: './app/html/pagination.component.html',
styleUrls: ['app/css/pagination.component.css']
})
export class Pagination {
pagCurrent: number;
@Input() dataPost: any;
constructor(){
}
ngOnChanges(changes: SimpleChanges){
try{
console.log(this.dataPost);
} catch(err) {
console.log(err);
}
}
}
Я не могу получить this.dataPost асинхр. Когда я звоню без ngOnChanges console.log (this.dataPost), то произойдет ошибка. Я немного решил эту проблему. I Used ngOnChanges, но в консоли было отправлено 2 сообщений. Одно сообщение с ошибкой другое с отличным результатом.
Как я понимаю, это произошло потому, что ngOnChanges - это цикл Lifecycle и вызывается перед ngOnInit и при изменении одного или нескольких свойств ввода данных. Мне бы не хотелось, чтобы это называлось дважды.
Как получить даты с сервера в дочернем компоненте имеет @Input?
Прошу прощения за грамматику. Буду рад, что все решают.
Благодарим за ваше время. Я пытался это сделать, но плохо. Я удалил 'ngOnChanges' и запустил' console.log (this.dataPost) 'в costructor, но плохой результат' undefined'. Я думаю, что это не асинхронно. Можете ли вы помочь, как решить? – Lestoroer
Также 'dataPost $: any;' не может решить эту проблему. Когда я получаю что-то от сервера и показываю in'ngAfterViewInit() { console.log (this.dataPost); } ', тогда возвращаем результат, подобный этому« null ». – Lestoroer
Как выглядит 'urlService.getData'? Значение еще не доступно в 'ngAfterViewInit'. Если 'urlService.getData' делает вызов на сервер, это занимает целую вечность по сравнению с кодом, который выполняется только в браузере. Вам нужно связать все асинхронные вызовы с помощью '.then (...)' для обещаний или операторов типа '.map()', '.do()', '.subscribe (...)' для наблюдаемых. Когда выполняется 'ngAfterViewInit', вызов на сервер, вероятно, еще не отправлен. –