【发布时间】:2020-01-30 04:24:19
【问题描述】:
【问题讨论】:
-
您提出问题并链接答案,这将在完整示例中。你对这个例子有什么特别不理解的地方?
-
@Hiws 告诉我链接上的答案,请:)
标签: vue.js bootstrap-vue
【问题讨论】:
标签: vue.js bootstrap-vue
我正在使用v-model 并将其设置为不同的数组,因为b-table 上的v-model 在过滤和分页后返回当前显示的项目。当您限制需要循环关闭的项目数量时,使其对性能更加友好。
window.onload = () => {
new Vue({
el: '#app',
data() {
return {
items: [
{ id: 1, name: 'Povl', age: 26, gender: 'Male', secret: 'I love kittens' },
{ id: 2, name: 'Charlie', age: 9, gender: 'Female', secret: 'I love cupcakes' },
{ id: 3, name: 'Max', age: 71, gender: 'Male', secret: 'I love puppies' }
],
currentItems: [],
fields: [
{ key: 'name' }, { key: 'age' }, { key: 'gender' }, { key: 'actions' }
]
}
},
methods: {
//finds a specific item based on the provided ID and toggles details on that item
toggleDetails(row) {
if(row._showDetails){
this.$set(row, '_showDetails', false)
}else{
this.currentItems.forEach(item => {
this.$set(item, '_showDetails', false)
})
this.$nextTick(() => {
this.$set(row, '_showDetails', true)
})
}
}
}
})
}
<link href="//unpkg.com/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"/>
<link href="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.min.js"></script>
<script src="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.js"></script>
<div id="app">
<b-container class='pt-3'>
<b-table :items="items" :fields="fields" v-model="currentItems" bordered fixed>
<template v-slot:cell(actions)="{ detailsShowing, item }" >
<!-- Use the built in method from the scoped data to toggle the row details -->
<b-btn @click="toggleDetails(item)">{{ detailsShowing ? 'Hide' : 'Show'}} secret</b-btn>
</template>
<template v-slot:row-details="{ item }">
<b-card>
{{ item.secret }}
</b-card>
</template>
</b-table>
</b-container>
</div>
【讨论】:
id 切换特定行
row.toggleDetails() 而不是this.$set(...)?我错过了什么吗?
toggleDetails 函数中公开,因为它是在 sn-p 中设置的。您必须将其从插槽数据发送到使用它的方法。直接在项目上设置_showDetails 更简单。
@Hiws 回答仅在我将 @row-clicked 侦听器添加到 b-table 时才对我有效。
如果单击操作槽,我无法使其工作,就像给出的示例一样。我更改了if 条件,因为它返回了undefined,这导致逻辑只运行else 部分
toggleDetails(row) {
if (row.detailsShowing) {
row.toggleDetails()
} else {
this.currentItems.forEach(item => {
this.$set(item, '_showDetails', false)
})
this.$nextTick(() => {
row.toggleDetails()
})
}
}
【讨论】: