You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue中如何为v-for循环元素正确绑定HTML Video的src属性?

解决Vue v-for动态绑定视频路径的问题

问题原因

硬编码路径时,Vue的webpack构建工具会自动解析../assets/homeVid.mp4这类相对路径,将其转换为编译后的资源路径(通常带哈希值);但动态绑定:src="item.vidPath"时,webpack不会解析字符串形式的路径,浏览器会直接以当前页面URL为基准发送请求,忽略路径中的..,导致资源定位失败。

解决方案

方案1:在数据中用require()包装路径

修改列表数据,将vidPath的值用require()包裹,让webpack提前解析路径:

// 示例数据
data() {
  return {
    items: [
      { vidPath: require('../assets/homeVid.mp4') },
      // 其他条目...
    ]
  }
}

模板中直接绑定:

<video :src="item.vidPath" controls></video>

方案2:模板中动态使用require()

如果无法修改原始数据,可在模板中直接对路径执行require():

<video :src="require(item.vidPath)" controls></video>

注意:item.vidPath必须是相对于当前组件文件的静态可解析路径,比如../assets/homeVid.mp4,不能是完全动态的拼接(比如../assets/${name}.mp4),除非提前告知webpack要打包的资源范围。

方案3:将视频移至public目录

把视频文件放到项目根目录的public文件夹下,使用绝对路径动态绑定:

// 数据中的路径改为绝对路径
items: [
  { vidPath: '/homeVid.mp4' },
  // 其他条目...
]

模板绑定:

<video :src="item.vidPath" controls></video>

这种方式下,资源不会被webpack处理,会直接复制到构建后的根目录,浏览器请求路径为localhost:8080/homeVid.mp4,无需解析相对路径。

补充说明

如果需要动态拼接文件名(比如根据不同条目加载不同视频),可以用如下方式让webpack识别需要打包的资源:

<video :src="require(`../assets/${item.vidName}.mp4`)" controls></video>

此时webpack会打包../assets目录下所有.mp4格式的文件,确保动态拼接的路径能正确加载。

内容的提问来源于stack exchange,提问作者Thomas Hart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:05:19