如何在 vue js 中为来自 API 的数据指定 bootstrap 手风琴
How to specify bootstrap accordion for data from API in vue js
我正在尝试使用 bootstrap-vue 中的手风琴元素创建一个订单提要,但我很难在按下它时只打开一个元素。
我尝试更改来自 api 的 ID,但没有结果。
HTML:
<div v-for="el in APIData" :key="el.id" >
<div class="accordion" role="tablist" :id="el.id">
<b-card no-body class="mb-1" :id="el.id">
<b-card-header header-tag="header" class="p-1" role="tab" :id="el.id">
<b-button block v-b-toggle.accordion-1 variant="dark">{{ el.name }}. Deadline: {{ el.deadline }} Price: <strong>{{ el.price }}</strong></b-button>
</b-card-header>
<b-collapse id="accordion-1" accordion="my-accordion" role="tabpanel" >
<b-card-body>
<b-card-text>
<div> <p> <strong>Posted:</strong> {{ el.date_posted }}. <br />{{ el.description }}</p> </div>
<a class= "button btn btn-dark">More</a>
</b-card-text>
</b-card-body>
</b-collapse>
</b-card>
</div>
</div>
脚本:
<script>
import axios from 'axios'
export default {
name: 'Orders',
data () {
return {
APIData: [],
}
},
created () {
axios
.get('/api/v1/orders/')
.then(response => {
this.APIData = response.data
console.log(response.data)
})
.catch(err => {
console.log(err)
})
},
}
</script>
数据示例:
[
{
价格:“179”,
编号:“1”,
date_posted: "04_04_2022",
描述:“一些 desc bla bla bla”,
name: "某个名字",
截止日期:“04_06_2022”
},
{
价格:“189”,
编号:“2”,
date_posted: "05_04_2022",
描述:“另一个 desc bla bla bla”,
name: "某个名字",
截止日期:“05_06_2022”
},
{
价格:“199”,
编号:“3”,
date_posted: "06_04_2022",
描述:“另一个 desc bla bla bla”,
name: "某个名字",
截止日期:“06_06_2022”
},
]
同样,我只需要打开一个手风琴,但要打开三个,例如因为在bootstrap看来都是一个元素。
您可以简单地通过将 v-b-toggle
属性中的 el.id
和手风琴 id
连接起来来实现。
工作演示:
new Vue({
el: '#app',
data: {
APIData: [{
id: 1,
name: 'Accordion 1'
}, {
id: 2,
name: 'Accordion 2'
}]
}
})
#app {
padding: 20px;
height: 350px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<script src="https://unpkg.com/bootstrap-vue@2.22.0/dist/bootstrap-vue.js"></script>
<link rel="stylesheet" href="https://unpkg.com/bootstrap-vue@2.22.0/dist/bootstrap-vue.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.4.1/dist/css/bootstrap.min.css"/>
<div id="app">
<div v-for="el in APIData" :key="el.id" >
<p>
<b-btn v-b-toggle="`collapse-${el.id}`" variant="primary">Toggle {{ el.name }}</b-btn>
</p>
<b-collapse :id="`collapse-${el.id}`">
<b-card>
Collapse {{ el.name }} contents Here
</b-card>
</b-collapse>
</div>
</div>
我正在尝试使用 bootstrap-vue 中的手风琴元素创建一个订单提要,但我很难在按下它时只打开一个元素。
我尝试更改来自 api 的 ID,但没有结果。
HTML:
<div v-for="el in APIData" :key="el.id" >
<div class="accordion" role="tablist" :id="el.id">
<b-card no-body class="mb-1" :id="el.id">
<b-card-header header-tag="header" class="p-1" role="tab" :id="el.id">
<b-button block v-b-toggle.accordion-1 variant="dark">{{ el.name }}. Deadline: {{ el.deadline }} Price: <strong>{{ el.price }}</strong></b-button>
</b-card-header>
<b-collapse id="accordion-1" accordion="my-accordion" role="tabpanel" >
<b-card-body>
<b-card-text>
<div> <p> <strong>Posted:</strong> {{ el.date_posted }}. <br />{{ el.description }}</p> </div>
<a class= "button btn btn-dark">More</a>
</b-card-text>
</b-card-body>
</b-collapse>
</b-card>
</div>
</div>
脚本:
<script>
import axios from 'axios'
export default {
name: 'Orders',
data () {
return {
APIData: [],
}
},
created () {
axios
.get('/api/v1/orders/')
.then(response => {
this.APIData = response.data
console.log(response.data)
})
.catch(err => {
console.log(err)
})
},
}
</script>
数据示例:
[ { 价格:“179”, 编号:“1”, date_posted: "04_04_2022", 描述:“一些 desc bla bla bla”, name: "某个名字", 截止日期:“04_06_2022” }, { 价格:“189”, 编号:“2”, date_posted: "05_04_2022", 描述:“另一个 desc bla bla bla”, name: "某个名字", 截止日期:“05_06_2022” }, { 价格:“199”, 编号:“3”, date_posted: "06_04_2022", 描述:“另一个 desc bla bla bla”, name: "某个名字", 截止日期:“06_06_2022” },
]
同样,我只需要打开一个手风琴,但要打开三个,例如因为在bootstrap看来都是一个元素。
您可以简单地通过将 v-b-toggle
属性中的 el.id
和手风琴 id
连接起来来实现。
工作演示:
new Vue({
el: '#app',
data: {
APIData: [{
id: 1,
name: 'Accordion 1'
}, {
id: 2,
name: 'Accordion 2'
}]
}
})
#app {
padding: 20px;
height: 350px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<script src="https://unpkg.com/bootstrap-vue@2.22.0/dist/bootstrap-vue.js"></script>
<link rel="stylesheet" href="https://unpkg.com/bootstrap-vue@2.22.0/dist/bootstrap-vue.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.4.1/dist/css/bootstrap.min.css"/>
<div id="app">
<div v-for="el in APIData" :key="el.id" >
<p>
<b-btn v-b-toggle="`collapse-${el.id}`" variant="primary">Toggle {{ el.name }}</b-btn>
</p>
<b-collapse :id="`collapse-${el.id}`">
<b-card>
Collapse {{ el.name }} contents Here
</b-card>
</b-collapse>
</div>
</div>