侧边栏壁纸
博主头像
MicroMatrix博主等级

曲则全,枉则直,洼则盈,敝则新,少则得,多则惑。是以圣人抱一为天下式。不自见,故明;不自是,故彰;不自伐,故有功;不自矜,故长。夫唯不争,故天下莫能与之争。古之所谓“曲则全”者,岂虚言哉!诚全而归之。

  • 累计撰写 80 篇文章
  • 累计创建 21 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Vue3和Vue2的一些写法区别

蜗牛
2022-08-19 / 0 评论 / 0 点赞 / 6 阅读 / 2936 字 / 正在检测是否收录...

摘要

本篇记录vue3和vue2在实现相同的逻辑上的一些语法差异,持续更新。

事件绑定

在开发过程中会遇到需要定制一些video或者audio播放组件,需要用到一些原生的事件。但是vue3和vue2原生事件的绑定是不一样的。
例如下面的音频播放组件
vue2中只需要在mounted(组件渲染完成的时候)在获取dom元素上直接绑定事件就可以

mounted(){
    this.$refs.audioRef.onloadedmetadata = (evt)=>{
        // 编写自己的逻辑
        xxxxx
    }
}

但是在vue3中,如果你也按照这样的逻辑编写

let audioRef = ref()
onMounted(()=>{
    audioRef.value.onloadedmetadata = (evt)=>{
        // 编写自己的逻辑
        xxxxx
    }
})
// 上面这种事件不会触发,根本就像没有绑定一样

所以需要改成如下写法

<audio
  ref="wechatVoice"
  :src="audioSrc"
  v-bind="{ onloadedmetadata, onended }"
>
  Your browser does not support the
  <code>audio</code>
  element.
</audio>

<script lang="ts" setup>
    const onloadedmetadata = (evt) => {
        // 编写加载完成之后的逻辑
    }
    const onended = (evt) =>{
        // 编写播放完成之后的逻辑
    }
</script>
0

评论区