我将传递给此Table组件标题和数据道具,并在IDE VSCode中进行命中保存更改时,将使用数据更新并在表中显示页面。尽管在SSR中数据是空数组,但是当我重新加载页表时,即使在客户端的控制台中,它也没有显示数据,而在安装组件时,我可以看到它。 我做错了什么?感谢任何帮助。
<template>
<div class="content">
<div class="col-md-8 ml-auto mr-auto">
<h2 class="text-center">{{ title }}</h2>
</div>
<div class="row mt-5">
<div class="col-12">
<card card-body-classes="table-full-width">
<div>
<div
class="col-12 d-flex justify-content-center justify-content-sm-between flex-wrap"
>
<el-select
class="select-primary mb-3 pagination-select"
v-model="pagination.perPage"
placeholder="Per page"
>
<el-option
class="select-primary"
v-for="item in pagination.perPageOptions"
:key="item"
:label="item"
:value="item"
>
</el-option>
</el-select>
<base-input>
<el-input
type="search"
class="mb-3 search-input"
clearable
prefix-icon="el-icon-search"
placeholder="Search records"
v-model="searchQuery"
aria-controls="datatables"
>
</el-input>
</base-input>
</div>
<el-table :data="queriedData">
<el-table-column
v-for="column in tableColumns"
:key="column.label"
:min-width="column.minWidth"
:prop="column.prop"
:label="column.label"
>
</el-table-column>
<!-- -->
</el-table>
</div>
<div
slot="footer"
class="col-12 d-flex justify-content-center justify-content-sm-between flex-wrap"
>
<div class="">
<p class="card-category">
Showing {{ from + 1 }} to {{ to }} of {{ total }} entries
</p>
</div>
<base-pagination
class="pagination-no-border"
v-model="pagination.currentPage"
:per-page="pagination.perPage"
:total="total"
>
</base-pagination>
</div>
</card>
</div>
</div>
</div>
</template>
<script>
import { Table, TableColumn, Select, Option } from "element-ui";
import { BasePagination } from "@/components";
import Fuse from "fuse.js";
export default {
name: "paginated",
props: ["title", "data"],
components: {
BasePagination,
[Select.name]: Select,
[Option.name]: Option,
[Table.name]: Table,
[TableColumn.name]: TableColumn,
},
computed: {
/***
* Returns a page from the searched data or the whole data. Search is performed in the watch section below
*/
queriedData() {
let result = this.tableData;
if (this.searchedData.length > 0) {
result = this.searchedData;
}
return result.slice(this.from, this.to);
},
to() {
let highBound = this.from + this.pagination.perPage;
if (this.total < highBound) {
highBound = this.total;
}
return highBound;
},
from() {
return this.pagination.perPage * (this.pagination.currentPage - 1);
},
total() {
return this.searchedData.length > 0
? this.searchedData.length
: this.tableData.length;
},
},
data() {
// console.log(this.data);
return {
pagination: {
perPage: 5,
currentPage: 1,
perPageOptions: [5, 10, 25, 50, 100],
total: 0,
},
searchQuery: "",
propsToSearch: ["name", "email", "age"],
tableColumns: this.data.column_titles.map((el) => ({ // Here I set data from props
prop: el,
label: el,
minWidth: 120,
})),
tableData: this.data.column_data, // Here I set data from props
searchedData: [],
fuseSearch: null,
};
},
methods: {},
mounted() {
this.tableColumns = -this.data.column_titles.map((el) => ({
prop: el,
label: el,
minWidth: 120,
}));
this.tableData = this.data.column_data;
this.fuseSearch = new Fuse(this.tableData, {
keys: ["name", "email"],
threshold: 0.3,
});
},
watch: {
/**
* Searches through the table data by a given query.
* NOTE: If you have a lot of data, it's recommended to do the search on the Server Side and only display the results here.
* @param value of the query
*/
searchQuery(value) {
let result = this.tableData;
if (value !== "") {
result = this.fuseSearch.search(this.searchQuery);
}
this.searchedData = result;
},
},
};
</script>
<style>
.pagination-select,
.search-input {
width: 200px;
}
</style>