【发布时间】:2020-01-31 20:17:04
【问题描述】:
我正在创建一个bootstrap-vue 表来使用分页、过滤器和搜索来显示汽车列表。
我通过外部 API 获取数据并使用 axios 用数据填充表。
比如我在第二页,在分页第一页内搜索car name,就找不到结果了。
我尝试了与其他答案不同的解决方案,但似乎没有人在工作
这是模板代码
<template slot-scope="row">
<div>
<b-form-group label-cols-sm="1" :label="search" class="mt-2 mr-2">
<b-input-group>
<b-form-input v-model="filter" placeholder="Type to Search">
</b-form-input>
<b-input-group-append>
<b-button :disabled="!filter" @click="filter = ''">
{{ $t('labels.frontend.listings.clear') }}
</b-button>
</b-input-group-append>
</b-input-group>
</b-form-group>
<!--
<input type="checkbox" :value="items.id" v-model="selected" />
-->
<!-- eslint-disable -->
<b-table
striped
hover
:items="items"
:fields="fields"
:filter="filter"
selectable
:select-mode="selectMode"
selected-variant="success"
@row-selected="rowSelected"
:current-page="currentPage"
:per-page="perPage"
:outlined="outlined"
responsive
autoWidth
>
<!-- eslint-disable -->
<template slot="selected" slot-scope="{ rowSelected }">
<input type="checkbox" :value="items.id" v-model="selected" />
<span v-if="rowSelected">✔</span>
</template>
<template slot="actions" slot-scope="row">
<b-button
size="sm"
:to="'/account/cars/' + row.item.id"
class="mr-1"
>
Information
</b-button>
</template>
<template slot="delete" slot-scope="row">
<b-button
size="sm"
@click="fireDelete(row.item, row.index)"
class="mr-1"
variant="danger"
>
<i class="fa fa-trash-o" aria-hidden="true">
</i>
</b-button>
</template>
</b-table>
<b-row>
<b-col md="8" class="my-1">
<b-pagination
v-model="currentPage"
:total-rows="totalRows"
:per-page="perPage"
class="my-0"
></b-pagination>
</b-col>
<b-col md="4">
<b-form-group label-cols-sm="3" :label="page">
<b-form-select v-model="perPage" :options="pageOptions"></b-form-select>
</b-form-group>
</b-col>
</b-row>
</div>
</template>
and this is the script code
export default {
data() {
return {
selectMode: 'multi',
selected: [],
filter: null,
totalRows: 1,
currentPage: 1,
perPage: 15,
pageOptions: [5, 15, 30],
outlined: true,
items: []
}
},
mounted() {
axios.get(this.$app.route('account.api.cars')).then(res => {
for (let i in res.data) this.items.push(res.data[i])
this.totalRows = this.items.length
})
}
}
boostrap-vue提供的默认搜索方式只搜索实际页面中的结果,有没有在分页中搜索其他项目?
【问题讨论】:
-
bootstrap-vue的默认过滤基于所有页面/项目,而不仅仅是您所在的页面。您可以在此处查看完整示例:bootstrap-vue.js.org/docs/components/table#complete-example -
我发现这个函数可以解决问题 onFiltered(filteredItems) { // 触发分页更新由于过滤的按钮/页面数 this.totalRows = filteredItems.length this.currentPage = 1 }
标签: search vuejs2 pagination vue-component