我有这个模板:

<video controls autoplay muted loop>
  <source :src="videoFileName" />
</video>

获取视频源如下:

axios.get(`/project/v1/post/${route.params.id}`)
  .then((response) => {
    videoFileName.value = `@/assets/vids/${response.data.meta.video}`
  })
  .catch((error) => {})

这会失败,因为Vue/Vite没有用相应的绝对路径替换"@/",所以模板部分接收"@/."它无法理解.

如何在我的呼叫响应中获得绝对路径?

https://vitejs.dev/guide/features.html#dynamic-import似乎是一条路,但我不确定如何将它整合到我的非同步AXIOS通话中.

推荐答案

问题是,Vue/Vite不能识别运行时代码中的"@/"别名,就像在Axios响应中一样.您应该使用带有port.meta.url的新URL来动态构建绝对路径:

axios.get(`/project/v1/post/${route.params.id}`)
  .then((response) => {
    const relativePath = `/assets/vids/${response.data.meta.video}`;
    videoFileName.value = new URL(relativePath, import.meta.url).href;
  })
  .catch((error) => {});

Vue.js相关问答推荐

通过另一个文件调用模块化窗口组件

VueUse onClickOutside不支持右键单击

在 onMounted 之前渲染的 Vue 模板

Vue,Composition API:如何从react 式转换中跳过深度嵌套的属性?

使用 Vue.js 将文件输入绑定到按钮

如何容器化 Vue.js 应用程序?

Vue.js 过滤数组

如何有条件地更改 vue/vuetify 文本字段 colored颜色

Nuxt 打开链接到模态

SassError:媒体查询表达式必须以(开头

Vuejs模板继承

VueJS错误编译模板

如何从 vue 组件调用 App.vue 中的方法

axios 拦截器响应未定义

在 vue.js 组件中react this.props.children

Vue 2.0 设置路由 - 不要使用new来产生副作用

Vue.JS 2.0 修改不相关数据时速度慢

如何使用 Vuetify 验证复选框组

Vue Router beforeRouteLeave 不会停止子组件

使用 CloudFront 部署在 S3 上的 VueJS 应用程序的指定的密钥不存在