【发布时间】:2019-10-30 15:56:15
【问题描述】:
我正在尝试使用来自 props 的路径作为 src 属性来显示带有 img 标签的图像。
我尝试使用@ 更改路径,使用src 的整个路径,在组件中添加../assets/,并且仅将文件名(orange.png)作为道具传递。
我总是显示默认的损坏图像。
在浏览器中检查时,路径似乎很好。
当我直接显示图像时,我可以看到路径被解析为一些不同的路径<img data-v-1212d7a4="" src="/img/orange.7b71a54c.png">。
编辑:
另外我试过这个帖子Can't dynamically pass relative src path for imgs in Vue.js + webpack,
其中使用<img :src="require(picture_src)" /> 作为答案。
这会导致错误:Error in render: "Error: Cannot find module '../assets/orange.png'"
(编辑2:
正如我的回答帖子中所述,这个答案最终对我有用。)
在我的脚本部分中使用 let images = require.context('../assets/', false, /\.png$/) 的类似 webpack 方法也会出现同样的错误,作为这篇文章 Can't dynamically pass relative src path for imgs in Vue.js + webpack 的答案。
我是 Vue.js 的新手,所以我不完全知道发生了什么或如何搜索它,或者它可能与我最初尝试的内容无关。
当我直接通过路径时,我可以显示我的图像,就像这样
<img src="../assets/orange.png"/>
现在我实际上想在 props 中将它传递给我的组件,然后在组件内部,显示它从 props 读取路径。
组件
<template>
<div>
<img :src=picture_src />
<div class="pic_sub">{{pic_desc}}</div>
</div>
</template>
<script>
export default {
name: 'PictureCard',
props: {
picture_src: String,
pic_desc: String
}
}
</script>
使用组件:
<template>
<div>
<PictureCard pic_desc='some description text' picture_src='../assets/orange.png' />
</div>
</template>
<script>
import PictureCard from './components/PictureCard.vue'
export default {
name: 'app',
components: {
PictureCard
}
}
</script>
如果可能的话,我很乐意从通过组件道具的路径显示我的。
否则,我很想知道一些其他解决方案、变通办法或在这种情况下的最佳实践知识。
【问题讨论】:
-
直接传递图像而不是源字符串怎么样?例如,在主组件中导入图像并将其传递到 PicutureCard 中?
-
这个问题经常出现。简单的解决方法是使用
:src="require(picture_src)" -
这里的最佳实践是使用 js 创建新图像并使用来自 props 的 url
-
感谢您的反馈。当我尝试使用
:src="require(picture_src)"时出现错误,整个组件不再呈现。Error in render: "Error: Cannot find module '../assets/orange.png'"