У мене є компонент, який отримує масив image
об’єктів як Input
дані.
export class ImageGalleryComponent {
@Input() images: Image[];
selectedImage: Image;
}
Я хотів би, щоб компонент завантажував selectedImage
значення, було встановлено перший об'єкт images
масиву. Я намагався зробити це за допомогою OnInit
гачка життєвого циклу так:
export class ImageGalleryComponent implements OnInit {
@Input() images: Image[];
selectedImage: Image;
ngOnInit() {
this.selectedImage = this.images[0];
}
}
це призводить до помилки, Cannot read property '0' of undefined
що означає, що images
значення не встановлено на цьому етапі. Я також пробував OnChanges
хук, але я застряг, бо не можу отримати інформацію про те, як спостерігати зміни масиву. Як я можу досягти очікуваного результату?
Батьківський компонент виглядає так:
@Component({
selector: 'profile-detail',
templateUrl: '...',
styleUrls: [...],
directives: [ImageGalleryComponent]
})
export class ProfileDetailComponent implements OnInit {
profile: Profile;
errorMessage: string;
images: Image[];
constructor(private profileService: ProfileService, private routeParams: RouteParams){}
ngOnInit() {
this.getProfile();
}
getProfile() {
let profileId = this.routeParams.get('id');
this.profileService.getProfile(profileId).subscribe(
profile => {
this.profile = profile;
this.images = profile.images;
for (var album of profile.albums) {
this.images = this.images.concat(album.images);
}
}, error => this.errorMessage = <any>error
);
}
}
Шаблон батьківського компонента має це
...
<image-gallery [images]="images"></image-gallery>
...
images
заповнюються дані в батьківському компоненті? Тобто це через запит (и) http? Якщо так, вам може бути краще, якщо ImageGalleryComponent підписаться () на http спостережуваний.