Tengo un componente que recibe una serie de imageobjetos como Inputdatos.
export class ImageGalleryComponent {
@Input() images: Image[];
selectedImage: Image;
}
Me gustaría que cuando el componente cargue el selectedImagevalor se establezca en el primer objeto de la imagesmatriz. He intentado hacer esto en el OnInitgancho del ciclo de vida de esta manera:
export class ImageGalleryComponent implements OnInit {
@Input() images: Image[];
selectedImage: Image;
ngOnInit() {
this.selectedImage = this.images[0];
}
}
esto me da un error Cannot read property '0' of undefinedque significa que el imagesvalor no está establecido en esta etapa. También probé el OnChangesgancho, pero estoy atascado porque no puedo obtener información sobre cómo observar los cambios de una matriz. ¿Cómo puedo lograr el resultado esperado?
El componente principal se ve así:
@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
);
}
}
La plantilla del componente principal tiene esto
...
<image-gallery [images]="images"></image-gallery>
...
imagesrellenan los datos en el componente principal? Es decir, ¿es a través de una solicitud http? Si es así, es mejor que tenga el ImageGalleryComponent subscribe () al http observable.