Я создаю видеокомпонент, и мне нужно получить размеры исходного видео (исходного файла или контейнера), чтобы передать его компоненту-сиблиру. Я использую этот код:Получить исходные размеры видеотега в Angular 2
//Video component
@Component({
moduleId: module.id,
selector: 'kt-media',
templateUrl: 'kt-media.component.html'
})
export class KT_MediaComponent implements AfterViewInit{
...
private ktIsMedia: boolean;
private ktMediaType: string;
@ViewChild('ktVideo') ktVideoElement;
constructor(private el: ElementRef, private renderer: Renderer) {
this.setMediaType();
}
ngAfterViewInit(){
this.ktVideoElement = this.getSize();
}
setMediaType(){
//This implementation works fine, I hide it for clarity of the problem
//Sets this.ktIsMedia to true and this.ktMediaType to 'video'
}
getSize():ktSize{
let w = this.ktVideoElement.nativeElement.videoWidth;
let h = this.ktVideoElement.nativeElement.videoHeight;
return {width: w, height: h}
}
}
Здесь шаблон компоненты:
<div *ngIf="ktIsMedia && ktMediaType === 'video'" >
<video
#ktVideo>
<source
[attr.src]="ktMediaSrc |safeUrl"
type="video/{{ktVideoType}}">
</video>
</div>
видео показано правильно, но исследуя против кода отладчика, это показывает, что ktVideoElement videoWidth и videoHeight является 0. Я попытался реализовать getSize() на разных крючках жизненного цикла: aferviewinit, oninit и т. Д. ... всегда всегда возвращает 0 в качестве размеров видео. Возможно получить размеры исходного файла или после загрузки файла в представление? Если это так, как я могу его реализовать?
Получаете ли вы ожидаемые значения при использовании '$ 0.videoWidth' в консоли браузера? –
Да, это показывает правильные размеры – Miguel
Возможно, вам нужно подождать события видеоэлемента. Я не использовал его, но, возможно, есть какое-то «загруженное» или подобное событие, которое должно произойти до того, как элемент определит его размер. Вы также можете попробовать добавить кнопку к своему компоненту, который вызывает 'getSize()', просто чтобы увидеть, что вы можете получить ожидаемые значения из Angular2 в более поздний момент времени. –