我有一个 vue 页面(Main.vue),它从一个单独的 vue 文件(Table.Vue)呈现一个组件。当我将所有逻辑都写入 Main.vue 时,自由格式的文本过滤器工作正常。但现在它几乎落后于我输入的每个字符,所以我认为我的实现可能有问题。
我在下面发布的代码已经过简化(即删除了分页和计算的东西)以显示我坚持的内容。
表.vue:
<!-- search bar -->
<b-input-group>
<b-form-input v-model="filter" type="search" placeholder="Type to Search"></b-form-input>
<b-input-group-append>
<b-button :disabled="!filter" @click="filter = ''">Clear</b-button>
</b-input-group-append>
</b-input-group>
<b-table
:items="details"
:fields="fields"
:filter="filter"
:current-page="currentPage"
:per-page="perPage"
@filtered="onFiltered"
>
</b-container>
<script>
export default {
name: 'Table',
props: ['details'],
data: function() {
return {
fields: [
{ key: 'ticket_number', sortable: true },
{ key: 'parent_id', label: 'Parent Ticket', sortable: true },
{ key: 'start', sortable: true, label: 'Start Date', formatter: (value) => { return moment(value, 'X').format('MM/DD/YYYY hh:mm:ss A') }},
],
// free text filter
filter: null
}
},
computed: {
rows: function(){
return this.details.length
}
},
created: function () {
this.filteredDetails = this.details
},
methods: {
onFiltered(filteredItems) {
// Trigger pagination to update the number of buttons/pages due to filtering
this.totalRows = filteredItems.length
this.currentPage = 1
}
}
}
主.vue:
<template>
<div v-if="details !== null">
<custtable :details="filteredDetails"/>
<br/>
</div>
</template>
<script>
import { API } from '@/common/api.js'
import Table from '@/components/Table'
export default {
name: 'Main',
data: function() {
return {
details: [],
filteredDetails: []
}
},
components: {
'custtable': Table
}
}
</script>
所以我想知道过滤器部分是否应该在 Table.vue 中:它应该在Main.vue吗?理想情况下应该在哪里filter定义变量?
如前所述,功能在那里,但似乎非常缓慢。最初的 API 调用通常会返回大约 150 个条目 (JSON),因此这不是一个疯狂的数据量。
到目前为止,我一直在参考文档。
任何和所有输入表示赞赏。