javascript - 在我的组件生命周期中,何时可以开始访问 this.$refs?
问题描述
在加载以下单文件 Vue.js 组件时,我试图加入一些 HTML5 音频事件:
<template>
<audio ref="player" v-bind:src="activeStationUrl" v-if="activeStationUrl" controls autoplay></audio>
</template>
<script>
export default {
props: ['activeStationUrl'],
data () {
return {
// Last media event that was recorded. We don't hook in to all events. More info at
// https://developer.mozilla.org/en-US/docs/Web/Apps/Fundamentals/Audio_and_video_delivery/Cross-browser_audio_basics.
'lastEvent': null,
}
},
mounted () {
const eventsToHookInTo = ['loadstart', 'canplay']
for (var eventToHookInTo in eventsToHookInTo) {
this.$refs.player.addEventListener(eventToHookInTo, function () {
this.lastEvent = eventToHookInTo
})
}
},
}
</script>
当带有this.$refs
触发器的行时,引用player
似乎还没有注册,所以这会导致错误。加载组件时附加这些事件侦听器的正确方法是什么?
解决方案
您应该能够在mounted
挂钩中访问它。我猜问题出在v-if
这里。有没有可能你可以把它改成一个v-show
?
如果你不能这样做,你可以尝试使用$nextTick方法。这应该也能正常工作,因为元素的实际渲染要到下一个刻度才会发生。
推荐阅读
- html - 如何检查伪元素 webkit-calendar-picker-indicator
- java - 如何创建一个 json 文件,然后在获取请求中返回它以响应应用程序
- python - 如何模拟对pyspark sql函数的内部调用
- typescript - Flask 使用客户端路由服务 Angular 应用程序
- python-3.x - Azure-storage-blob create_container 在 dockerized Django 应用程序中失败
- modbus - 如何将 modbus 设备连接到 volttron 实例?
- r - 您如何将蒙特卡洛模拟应用于回归?
- java - Spring boot delete 没有级联,它将外键设置为 null,然后在 null 约束上失败
- git - 您是否使用(或其他介词)另一个分支?
- r - Knit 文档导致 seq.int 出错