我正在为一个朋友建立一个基于Bootstrap Agency模板的公益网站。
我在投资组合部分。我创建了一个Portfolio.vue组件,除了从该组件内的数据动态加载图像外,其他组件都能正常工作。
例如:工作良好。
但是,如果我尝试做一个:src={{obj.img}},我会得到一个错误。
下面是代码。动态图像让我在VueJS中抓狂。
谢谢
<template>
<section class="page-section bg-light" id="portfolio">
<div class="container">
<div class="text-center">
<h2 class="section-heading text-uppercase">Portfolio</h2>
<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</h3>
</div>
<div class="row">
<div class="col-lg-4 col-sm-6 mb-4" v-for="(obj, key) in portfolioJSON" :key="key">
<div class="portfolio-item">
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal1">
<div class="portfolio-hover">
<div class="portfolio-hover-content"><i class="fas fa-plus fa-3x"></i></div>
</div>
<img class="img-fluid" src="../assets/img/portfolio/01-thumbnail.jpg" alt="" />
</a>
<div class="portfolio-caption">
<div class="portfolio-caption-heading">{{obj.caption}}</div>
<div class="portfolio-caption-subheading text-muted">{{obj.title}}</div>
</div>
</div>
</div>
</div>
</div>
</section>
</template>
<script>
export default {
data: () => ({
portfolioJSON: [
{
img: '../assets/img/portfolio/01-thumbnail.jpg',
caption: 'Threads',
title: 'Illustration'
},
{
img: '../assets/img/portfolio/02-thumbnail.jpg',
caption: 'Explore',
title: 'Graphic Design'
},
{
img: '../assets/img/portfolio/03-thumbnail.jpg',
caption: 'Finish',
title: 'Identity'
},
{
img: '../assets/img/portfolio/04-thumbnail.jpg',
caption: 'Lines',
title: 'Branding'
},
{
img: '../assets/img/portfolio/05-thumbnail.jpg',
caption: 'Southwest',
title: 'Website Design'
},
{
img: '../assets/img/portfolio/06-thumbnail.jpg',
caption: 'Window',
title: 'Photography'
}
]
})
}
</script>
<style scoped>
</style>
去掉大括号,只需尝试:src="obj.img"
Mustaches不能在HTML属性中使用。相反,使用v-bind指令:
<div v-bind:id="dynamicId"></div>
https://v2.vuejs.org/v2/guide/syntax.html#Attributes
感谢大家。
上面的答案让我找到了解决方案。经过大量挖掘,这就是我的想法。。。
<img class="img-fluid" :src="require(`@/assets/img/portfolio/${obj.img}`)" alt="">
这是完整的代码。。。
<template>
<section class="page-section bg-light" id="portfolio">
<div class="container">
<div class="text-center">
<h2 class="section-heading text-uppercase">Portfolio</h2>
<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</h3>
</div>
<div class="row">
<div class="col-lg-4 col-sm-6 mb-4" v-for="(obj, key) in portfolioJSON" :key="key">
<div class="portfolio-item">
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal1">
<div class="portfolio-hover">
<div class="portfolio-hover-content"><i class="fas fa-plus fa-3x"></i></div>
</div>
<img class="img-fluid" :src="require(`@/assets/img/portfolio/${obj.img}`)" alt="">
</a>
<div class="portfolio-caption">
<div class="portfolio-caption-heading">{{obj.caption}}</div>
<div class="portfolio-caption-subheading text-muted">{{obj.title}}</div>
</div>
</div>
</div>
</div>
</div>
</section>
</template>
<script>
export default {
data: () => ({
portfolioJSON: [
{
img: '01-thumbnail.jpg',
caption: 'Threads',
title: 'Illustration'
},
{
img: '02-thumbnail.jpg',
caption: 'Explore',
title: 'Graphic Design'
},
{
img: '03-thumbnail.jpg',
caption: 'Finish',
title: 'Identity'
},
{
img: '04-thumbnail.jpg',
caption: 'Lines',
title: 'Branding'
},
{
img: '05-thumbnail.jpg',
caption: 'Southwest',
title: 'Website Design'
},
{
img: '06-thumbnail.jpg',
caption: 'Window',
title: 'Photography'
}
]
})
}
</script>
<style scoped>
</style>
在数据对象中使用相对路径在大多数情况下都不起作用,因为vue从主项目目录开始查找。像这样从你的源文件夹开始对我有效。
./src/assets/img/portfolio/01-thumbnail.jpg
试用
<script>
export default {
data: () => ({
portfolioJSON: [
{
img: require('@assets/img/portfolio/01-thumbnail.jpg'),
caption: 'Threads',
title: 'Illustration'
},
{
img: require('@assets/img/portfolio/02-thumbnail.jpg'),
caption: 'Explore',
title: 'Graphic Design'
},
{
img: require('@assets/img/portfolio/03-thumbnail.jpg'),
caption: 'Finish',
title: 'Identity'
},
{
img: require('@assets/img/portfolio/04-thumbnail.jpg'),
caption: 'Lines',
title: 'Branding'
},
{
img: require('@assets/img/portfolio/05-thumbnail.jpg'),
caption: 'Southwest',
title: 'Website Design'
},
{
img: require('@assets/img/portfolio/06-thumbnail.jpg'),
caption: 'Window',
title: 'Photography'
}
]
})
}
</script>
<template>
<section class="page-section bg-light" id="portfolio">
<div class="container">
<div class="text-center">
<h2 class="section-heading text-uppercase">Portfolio</h2>
<h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</h3>
</div>
<div class="row">
<div class="col-lg-4 col-sm-6 mb-4" v-for="(obj, key) in portfolioJSON" :key="key">
<div class="portfolio-item">
<a class="portfolio-link" data-toggle="modal" href="#portfolioModal1">
<div class="portfolio-hover">
<div class="portfolio-hover-content"><i class="fas fa-plus fa-3x"></i></div>
</div>
<img class="img-fluid" :src="obj.img" alt="" />
</a>
<div class="portfolio-caption">
<div class="portfolio-caption-heading">{{obj.caption}}</div>
<div class="portfolio-caption-subheading text-muted">{{obj.title}}</div>
</div>
</div>
</div>
</div>
</div>
</section>
</template>