How to update the DOM before change event is done?
我创建了一个文件输入来打开视频。我想在 my_variable 存在的条件下显示该视频输入。这是 HTML 的样子:
1 2 3 4 | <input type="file" (change)="handleFileInput($event)" accept="video/mp4"> <video id="video" width="200" height="200" src="{{ my_variable.path }}"> </video> |
只要用户选择视频,就会调用 (change) 事件。我的函数 handleFileInput 应该像这样更新 my_variable:
1 2 3 4 5 | handleFileInput(event: any) { this.my_variable = event.target.files.item(0); this.video = document.getElementById('video') as HTMLInputElement; // do other stuff that requires this.video variable } |
我的问题是 this.video 变量是
我没有在 Stack Overflow 上找到任何东西,我尝试在执行
1 2 3 4 | setTimeout(() => { this.video = document.getElementById('video') as HTMLInputElement; // do other stuff that requires this.video variable }, 1000); |
它确实有效,但我希望我能找到更清晰的解决方案。
请你帮助我好吗 ?
谢谢
不要使用 *ngIf
1 2 | <video ....> </video> |
在 HTML DOM 中拥有 video 标签并使用 ngIf 用变量切换它,您正在做的是创建一个循环依赖项,因为 this.video 为空,因为它正在等待更改事件处理程序完成它的工作。您需要做的是动态添加视频标签
1 | <input type="file" (change)="handleFileInput($event)" accept="video/mp4"> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | @ViewChild('videoTagContainer') public videoTagContainer: ElementRef; handleFileInput(event: any) { this.my_variable = event.target.files.item(0); let parentElement = this.videoTagContainer.nativeElement; if(parentElement.firstChild) parentElement.removeChild(parentElement.firstChild); let videoElement = document.createElement('video') as HTMLInputElement; videoElement.id = 'video'; videoElement.width = '200px'; videoElement.height = '200px'; videoElement.src = this.my_variable.path; parentElement.appendChild(videElement); // do other stuff that requires this.video variable } |