在使用ant-design-vue中曾经使用过table组件,所以想着自己封装一个组件尝试一下,这是一个简易版本
封装一个名为Ttablede组件,该组件接收两个参数,分别是columns和dataSource
子组件:接收父组件传入的参数,并将传入的参数进行处理,提取出slot插槽值,用于动态设置具名插槽
import {computed, defineProps} from "vue";
// 接收参数 columns,dataSource
const props = defineProps({
columns: {
type: Array
},
dataSource: {
type: Array
}
})
// 提取slot属性,用于设置具名插槽
ref: columnSlot = computed(() => {
const filterColumns = props.columns.length && props.columns.map((v) => {
return v.slot
})
return filterColumns
})
const columns = [
{
title: '变化信息',
key: 'changeMsg',
slot: 'changeMsg',
},
{
title: '当前出价',
key: 'currentPrice',
slot: 'currentPrice',
},
{
title: '最低出价',
key: 'lowestPrice',
slot: 'lowestPrice',
},
{
title: '最高出价',
key: 'highestPrice',
slot: 'highestPrice',
},
]
const dataList = [
{
changeMsg:'课程词1',
currentPrice:'1.11',
lowestPrice:'0.01',
highestPrice:'2.35',
},
{
changeMsg:'课程词2',
currentPrice:'2.22',
lowestPrice:'1.01',
highestPrice:'3.35',
},
{
changeMsg:'课程词3',
currentPrice:'3.33',
lowestPrice:'3.01',
highestPrice:'2.35',
},
]
{{ item.title }}
// name动态设置具名插槽,content对应的数据传给外部父组件
// 具名插槽,接收对应的content的值
{{content.changeMsg}}
{{content.currentPrice}}
{{content.lowestPrice}}
{{content.highestPrice}}
-
{{ item.title }}
-
{{content.changeMsg}}
{{content.currentPrice}}
{{content.lowestPrice}}
{{content.highestPrice}}
其中columns可以自定义,dataList可以通过网络请求获取
import TTable from '../../components/common/TTable.vue';
如上图所示,我们想要对蓝色部位进行动态修改,点击蓝色,可以编辑,失去焦点,保存内容并发送网络请求,对父组件代码进行修改
{{ content.lowestPrice }}
点击红框
修改红框的值
点击其他位置,令其失去焦点
如果觉得上述情况下,无法直接弹出键盘,也可以直接封装一个指令,在mounted时,获取焦点即可
增加一个选项loading
loading:{
type:Boolean,
default:false,
}
根据传入的loading值,判断展示列表还是loading选项
加载中...
外部传入的loading可以根据网络请求进行判断,若发送网络请求中,loading值传true,网络请求结束/出错,loading传false try…catch…finally 可以实现这种判断情形。
如果有帮助的话,点个赞呗~
商用转载请标明来源哦~
总结用法,希望可以帮助到你,
我是Ably,你无须超越谁,只要超越昨天的自己就好~