javascript - Nuxt - 将相对路径作为道具传递导致 404
问题描述
我有一组要在页面中导入的 json 对象。我正在遍历数据并将对象作为道具传递给组件。对象上 json 数据的一个属性是 img 的相对路径(当前位于我的 /assets/ 文件夹中)。
前任。json
[
{
"title":"val1",
"img": "~/assets/image1.jpg",
"text":"Lorem ipsum dolor sit amet"
},
{
"title": "val2",
"img": "~/assets/image2.jpg",
"text":"Lorem ipsum dolor sit amet"
},
{
"title": "val3",
"img": "~/assets/image3.jpg",
"text":"Lorem ipsum dolor sit amet"
}
]
我正在使用的 vue 库的组件(bootstrap-vue)有一个“img-src”指令,它可以获取要显示的图像的 url 或路径。当我将道具传递给这个指令时,我得到了一个错误的图像路径和一个 404。
前任。用法
<div>
<b-card :img-src="data.img"></b-card>
</div>
<script>
export default {
props: {
data: {
title: String,
img: String,
text: String
}
}
}
</script>
生成的资产请求 URL 类似于 http://localhost:3000/~/assets/image1.jpg。如果我只是将静态字符串路径传递给指令
<div>
<b-card img-src="~/assets/image1.jpg"></b-card>
</div>
图像按预期加载,资产的 url 看起来像 http://localhost:3000/_nuxt/assets/image1.jpg
谁能解释这里出了什么问题?
解决方案
道具声明
您的道具未正确声明。您可以将data
道具声明为Object
,或单独的道具title
,img
和text
。我认为您的意思是单独声明它们:
export default {
props: {
//data: {
// title: String,
// img: String,
// text: String
//}
title: String,
img: String,
text: String
}
}
资产 URL 处理
Nuxt 用于vue-loader
加载 Vue SFC,并vue-loader
通过 自动将资产 URL 转换为 Webpack 模块请求require
,这仅适用于文字值(不适用于由 绑定的动态值v-bind
)。此资产 URL 转换适用于标签和属性的子集(包括<img>.src
),但可以通过其transformAssetUrls
选项进行配置。
bootstrap-vue
的 Nuxt 插件配置transformAssetUrls
为 include<b-card>.imgSrc
,这就是为什么<b-card img-src="~/assets/image1.jpg">
无需任何特殊处理即可工作的原因。
由于您有动态img-src
URL,因此它们需要是require
d:
<template>
<b-card :img-src="computedImg"></b-card>
</template>
<script>
export default {
//...
computed: {
computedImg() {
// Workaround `require` issue by prefixing `~/assets`
// https://stackoverflow.com/q/60569609/6277151
return require('~/assets/' + this.img.replace(/^~\/assets\//g, ''))
}
}
}
</script>
推荐阅读
- python - Python:使用其他列将值分配给 Pandas 中的新列作为列表
- javascript - 无法使用角度加载 @ng-bootstrap/ng-bootstrap
- r - 用特定数字替换一行中的最大值,并使用 dplyr 根据该最大值替换同一行中的所有其他值
- java - 在 fxml 中显示一个完整的链表
- amibroker - 52 周高点 afl 后的最低点
- python - 编码巨大的分类特征
- git - 仍然收到 vscode taskmarks.json 的 git LF 警告
- python-3.x - ImportError:无法导入名称“is_list_like”
- android - 移动应用程序电子邮件验证将用户带到不在应用程序中的网页?
- nstextfield - 如何从 control:textView:doCommandBySelector 获取 nstextfield