Knowledge-Base icon indicating copy to clipboard operation
Knowledge-Base copied to clipboard

vue-js-modal 生成的对话框中元素不能立即使用

Open Dream4ever opened this issue 7 years ago • 0 comments

需求描述

vue-js-modal 组件生成的模态对话框中包含 video 元素,但是发现用该组件的 show 方法显示对话框之后,其中的 video 元素并不是立即可用的。

方案调研

调研过程

用下面的 countTime() 函数检查 video 元素什么时候能生成,发现是立刻生成的。

countTime() {
  console.log('modal shown\n' + new Date());
  let haveVideo = false;
  let count = 0;
  while (haveVideo) {
    const vdo = document.querySelectorAll('#video');
    haveVideo = vdo.length ? 1 : false;
    count++;
  }
  console.log('video gotten' + new Date() + '\n' + count);
},

但是在浏览器中调试从 this.$modal.show('video-modal') 这行语句开始往后的部分,发现似乎需要了解 Vue 的执行原理,因为调试的时候,是在执行完了 macroTask 之类的函数之后,video 元素才可用的。

this.$modal.show('video-modal') 之后执行了下面的代码,video 还是不可用。

this.$nextTick(() => {
  this.loadVideo();
});

只有用 setTimeout 设置一定的延时,video 标签才可用:

setTimeout(() => {
  this.loadVideo();
}, 100);

入选方案

应用过程

记录应用入选方案的过程中所踩的坑,以及其它值得记录的内容。

要点总结

以列表形式记录本次需求实现过程中的要点:

  • 要点 1
  • 要点 2
  • 要点 3

Dream4ever avatar Jun 06 '18 08:06 Dream4ever