硬编码后,音频标签如何加载源,而Vue.js没有提供音频标签?

时间:2019-02-10 02:56:52

标签: javascript vue.js vuejs2 vue-component

我已经创建了一个组件,并且在该组件中是一个音频标签。我一直在尝试将mp3的文件路径从其父级传递到组件,但是由于某些原因,音频元素似乎无法成功加载文件。元素最后变成灰色,我没有得到任何错误。我知道属性已成功传递,因为我还传递了轨道的标题,并且在组件中的加载也很好。但是,如果我为源代码硬编码相同的路径,则可以正常工作。没什么大不了的,但是我有11条轨道要做,使用v-for语句会容易得多。

这是我的父组件:

    <template>
    <div container>
        <div class=banner>
            <img src="../assets/CryptoLogo2.svg"/>
        </div>
        <div class="albumcontainer">
          <div class="covercontainer"><img src="../assets/TIADCover(Final).png"/></div>
          <div class="arrow"></div>
          <div class="tracklistcontainer">
            <table class="tracklist">
              <tr class="track" v-for="track in tracks" :key="track.file"  style="padding: 20px;">
                <td>
                  <player :name="track.name" :file="track.file" />
                </td>
              </tr>
            </table>
          </div>
        </div>
        <div class="bio">
          <p>
          </p>
        </div>
        <div class="footer">
          <div class="footericons">
            <img src="../assets/icons/Facebook.svg" />
            <img src="../assets/icons/Instagram.svg" />
            <img src="../assets/icons/Twitter.svg" />
          </div>
        </div>
  </div>
</template>

<script>
import player from './player'
    export default {
  name: "Album1",
  data() {
    return {
      tracks: [
        {
          name: '5G',
          file: '../assets/tracks/5G.mp3'
        }
      ]
    }
  },
  components:{
    player
  }
};
</script>

然后是带有音频标签的组件:

<template>
    <div>
        <h3>{{ name }}</h3>
        <audio controls controlsList="nodownload">
            <source ref="player" v-bind:src="file" type="audio/mpeg">
        </audio>
    </div>
</template>

<script>
export default{
    name: "player",
    props: {
        name: {
            type: String,
            default: null
        },
        file:{
            type: String,
            default: null
        }
    }
}
</script>

在这里您可以看到我的数据已成功传递。

Here you can see that my data is being passed successfully.

您会看到source属性也已正确加载。

And you see that the source attribute is being loaded correctly as well.

这就是我得到的,您可以看到h3加载正常,所以我知道数据正在传递。但是该元素显示为灰色。

This is what I get, and you can see the h3 loads fine, so I know the data is being passed. But the element is greyed out.

为了测试,我尝试对文件路径进行硬编码:

<source src="../assets/tracks/5G.mp3">

那很好用:

It's working perfectly.

但是我不想那样做,因为我有大约11条轨道要做,所以我希望从正在传递的数据中加载它,以便我可以重用该组件。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

尝试在您的Vue u中使用类似的内容,当v-for未加载到src标签上时,我会使用此内容。

img

:src="getSrc(x.src)"

答案 1 :(得分:0)

由于文件名是静态的,因此永远不会触发您在文件prop上的监视功能,至少在您提供的代码中,它不会在安装组件之前触发监视程序上的更改。

From Vue.js API vm.$watch 在Vue实例上观看表达式或计算函数以了解更改。使用新值和旧值调用回调。