Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在我的组件生命周期中,我什么时候可以开始访问它。$refs?_Javascript_Html_Vue.js_Html5 Audio - Fatal编程技术网

Javascript 在我的组件生命周期中,我什么时候可以开始访问它。$refs?

Javascript 在我的组件生命周期中,我什么时候可以开始访问它。$refs?,javascript,html,vue.js,html5-audio,Javascript,Html,Vue.js,Html5 Audio,在加载以下单个文件Vue.js组件时,我试图连接到一些HTML5音频事件: <template> <audio ref="player" v-bind:src="activeStationUrl" v-if="activeStationUrl" controls autoplay></audio> </template> <script> export default { props: ['activeStationU

在加载以下单个文件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>

导出默认值{
道具:['activeStationUrl'],
数据(){
返回{
//上次录制的媒体事件。我们不会连接到所有事件。更多信息,请访问
// https://developer.mozilla.org/en-US/docs/Web/Apps/Fundamentals/Audio_and_video_delivery/Cross-browser_audio_basics.
“lastEvent”:null,
}
},
挂载(){
const eventsToHookInTo=['loadstart','canplay']
for(eventsToHookInTo中的var eventToHookInTo){
此.refs.player.addEventListener(eventToHookInTo,函数(){
this.lastEvent=eventToHookInTo
})
}
},
}

当带有
this.$refs
的行触发时,参考
player
似乎尚未注册,因此会导致错误。加载组件时,连接这些事件侦听器的正确方法是什么?

您应该能够在
挂载的
钩子中访问它。我猜问题出在这里的
v-if
。您是否可以将其更改为
v-show


如果你不能做到这一点,你可以尝试使用一种方法。这应该也可以,因为元素的实际渲染要到下一个刻度才会发生。

我担心将
v-if
更改为
v-show
会在切换源时对音频元素造成不必要的行为,但在测试后似乎没有问题。这种方法和
this.$nextTick(函数…
选项似乎都能工作!