javascript - 如何根据传递给该组件的属性更改组件的数据
问题描述
我正在尝试在 vue 中创建一个表组件,它将根据传递给该组件的属性更改顺序:
sort: {
type: String,
default: "desc",
description: "Table data order"
}
如果我通过这里 asc 我希望行以相反的顺序放置: desc - [1,2,3] asc - [3,2,1] 所以我所做的只是添加了一个改变顺序的函数状态数据中的数组:(这就是我获取行的所有数据的地方)
data: {
type: Array,
default: () => [],
description: "Table data"
}
它实际上是有效的,但我无法摆脱我做错事的感觉,我想看看你的想法和解决方案。在此先感谢,整个组件代码如下。
<template>
<table>
<thead>
<tr>
<slot name="columns" :columns="columns">
<th v-for="column in columns" :key="column">{{ column }}</th>
</slot>
</tr>
</thead>
<tbody>
<tr v-for="(item, index) in data" :key="index">
<slot :row="item" :index="index">
<td
v-for="(column, index) in colsWithValue(item)"
:key="index"
>{{ itemValue(item, column) }}</td>
</slot>
</tr>
</tbody>
</table>
</template>
<script>
export default {
name: "base-table",
props: {
columns: {
type: Array,
default: () => [],
description: "Table columns"
},
data: {
type: Array,
default: () => [],
description: "Table data"
},
sort: {
type: String,
default: "desc",
description: "Table data order"
}
},
computed: {
tableClass() {
return this.type && `table-${this.type}`;
},
colsWithValue() {
return row => {
return this.columns.filter(column => this.hasValue(row, column));
};
}
},
methods: {
hasValue(item, column) {
return item[column.toLowerCase()] !== "undefined";
},
itemValue(item, column) {
return item[column.toLowerCase()];
},
sortDataAsc(){
if(this.sort === "asc"){
this.data = this.data.reverse();
}
}
},
created(){
this.sortDataAsc();
}
};
</script>
解决方案
如果您不确定这是否是最佳解决方案,您可以在链接https://vuejs.org/v2/guide/list.html#Displaying-Filtered-Sorted查看有关此“显示过滤/排序结果”的文档-结果
最好的例子是:
<li v-for="n in evenNumbers">{{ n }}</li>
data: {
numbers: [ 1, 2, 3, 4, 5 ]
},
computed: {
evenNumbers: function () {
return this.numbers.filter(function (number) {
return number % 2 === 0
})
}
}
推荐阅读
- c# - Heap Corruption Exception When Running "Search Everything"
- html - 如何使用 display:flex 将图像放在一起?
- c# - string.Concat,可变还是不可变?
- c - 如何将用户 ID 转换为用户名统计功能
- sql - 从模式中删除字符串中的特定字符
- spring-boot - JPA @OneToMany 不保存父 ID
- python - 如何在没有表单元素的情况下使用scrapy登录scrapy
- javascript - YYYY-MM-DDTHH:mm 没有得到 am/pm momentjs
- html - 如何将两个 thymeleaf 元素并排放置
- javascript - 如何将视频叠加层与集群标记相结合