在vue中的beforedestroy方法里执行异步代码操作dom报错?

作者站长头像
站长
· 阅读数 11
beforeDestroy() {
  if (this.players.length) {
    this.delPlayer()
  }
},
methods: {
  delPlayer() {
    return new Promise((resolve, reject) => {
      if (!this.players.length) {
        resolve()
        return
      }
      for (const [index, item] of this.players.entries()) {
        item.player.stop().then(() => {
          document.getElementById(`video${index}`).remove();
          if (index + 1 === this.players.length) {
            resolve()
          }
        })
      }
    })
  }
}

在vue中的beforedestroy方法里执行异步代码操作dom报错?如何在beforedestroy方法里执行异步代码操作dom?

回复
1个回答
avatar
test
2024-08-11

错误信息:你不能读取null上的属性remove。不就是你getElementById获取到的是null。

针对这个错误,一般是做容错,判断获取到dom了再进行后续的remove操作。

但这里是因为你在beforeDestroy中执行的,他都要Destroy注销了,你还删除他干嘛,vue会把他删掉的,不用你来操作了,你把相关的变量清空,定时器取消就行。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容