二次封装table组件
封装table组件
初步设置
-
在component文件夹下新建table的vue组件
-
name:设置组建的名称
name: "tableComponent",
-
data:存放需要放在组件内的数据
data(){ return { table_data:[], table_config: { thead: [], checkBox: true } } },
-
methods:组件内用到的方法
-
beforeMount() {
this.getParkingList();
},
methods: {
/** table config*/
initConfig(){
// 看有没有相对应的key,有的话就替换
for (let key in this.config) {
if (Object.keys(this.table_config).includes(key)){
this.table_config[key] = this.config[key];
}
}
console.log("config",this.config)
},
/** 获取列表 */
getParkingList() {
const requestData = {
pageSize: 10,
pageNumber: 1
}
ParkingList(requestData).then(response => {
const data = response.data;
if (data) {
this.table_data = data
}
})
},
},
-
props:规定父组件传入的属性
props: { config: { type: Object, default: () => {} } },
-
watch:监听是否传入新的数据属性,如有有新的数据传入,更新信息
watch: { // 需要监听的对象 config: { handler(newValue) { this.initConfig() console.log("newValue",newValue) }, immediate: true } }
数据渲染
-
在传入数据的时候传入url,在组件中通过父组件传来的url信息发送请求。也就是说把发送请求的步骤也给封装在子组件中了,父组件只需要传url到子组件中即可渲染数据。
-
但是在后端传数据的时候,有时候用“1”,“0”来表示两个状态,需要转换成文字信息,这时候需要用到callback属性
-
callback属性在哪里定义?
子组件
的table_config的thead的每一个对象中,但是这个属性可有可无data() { return { table_config: { thead: [ { label: "类型", prop:"type", type:"function", callback:()=>{ }}, ], checkBox:false } } }
-
在
父组件
定义每一个列的时候传入type的值,然后在子组件
中接收v-if判断,如果type=='function',那么做进一步的处理tableComponent.vue:
<el-table-column v-if="item.type === 'function'" :key="item.prop" :prop="item.prop" :label="item.label"> // 做显示之类的处理 <span>{{ item.callback && item.callback() }}</span> </el-table-column>
-
callback方法一般是在父组件定义带上如何处理数据的方法进入
子组件
{ label: "类型", prop:"type", type:"function", callback:(row)=>{ if (row.type == 0){ return "室内" }else{ return "室外" } } },
-
在
子组件
中使用方法:-
在子组件中使用<span>标签传入callback方法{{ item.callback && item.callback() }},需要先判断该方法是否存在
-
把数据往外丢,放入callback函数的参数之中
<template slot-scope="scope"> <span>{{ item.callback && item.callback(scope.row) }}</span> </template>
-
再设定
父组件
中的callback,return的值就是要显示的值(可以返回html代码)// 父组件 { label: "类型", prop:"type", type:"function", callback:(row)=>{ if (row.type == 0){ return `1号<br/>室内` }else{ return `2号<br/>室外` } } },
// tableComponent.vue <template slot-scope="scope"> <span v-html="item.callback && item.callback(scope.row)"></span> </template>
-
父组件定义方法传到子组件
- 在父组件的config配置:
handler:this.fun()
,这样会出现的问题是this的指向问题
,可以用箭头函数来解决handler:()=>this.fun()
- 子组件的调用直接是
@click="item.handler()"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)