antd table排序 vue_antd of Vue 之table组件踩坑记
需求:頁面里有個table,點擊編輯可以編輯該table,保存數據并展示到頁面上來
第一種方法就是把編輯態的table做成子組件(且叫editeTable),通過v-show判斷是否進入編輯態來顯示隱藏。先仿造原本父組件(且叫fatherTable),做了一些基本的table樣式,子組件editeTable里的tr每格皆為antd-Form表單輸入框,接收fatherTable的data數據,用Form的API——validateFields校驗并獲取輸入域的值,進行編輯,用戶編輯完后,點保存,然后editeTable里的數據通過$emit函數showPage()傳遞給fatherTable,覆蓋掉fatherTable原本的data數據,這樣即可實現。以下為部分代碼(不全):1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
v-show="this.editeType"
:editeData="entityinfo"
:editeType="editeType"
@showPage="editeShow">
// 子組件js
export default {
props: {
editeData: Object,
editeType: Boolean
},
mounted() {
this.initDate();
},
watch: {
editeType: function() {
// console.log(this.editeType);
if(this.editeType){
setTimeout(()=>{
this.initDate();
},200)
// this.initDate();
// console.log(111,this.editeData)
}
else {
this.form.setFieldsValue(this.entityinfo);
}
},
methods: {
handleSearch(e) {
e.preventDefault();
this.form.validateFields((error, values) => {
// console.log('error', error);
// console.log('Received values of form: ', values);
// console.log(values);
this.$emit('showPage', values)
});
this.from.validateFields();
}
}
另一種方法是用antd-table自帶的編輯edite功能,這個功能可以實現對每一行的數據進行定點編輯,但是遇到一個坑,如果我編輯態也是做成一個子組件的話,就需要先在子組件通過props取到父組件傳來的值data,但我們都知道子組件是沒有權利更改父組件傳過來的值,這時候我們需要定義一個新的變量newdata,通過深拷貝data給newdata賦值,但細看antd文檔就知道,antd-table里的數據需要每一條數據都有一個屬于自己的key值,然后我們的data并沒有key值,此時就需要遍歷newdata,給每個對象就push一個key值。然后在newdata上進行操作。1
2
3
4this.newData = [...this.data] || [];
this.newData.forEach((item,index) => {
item.key = index;
}
而且要注意一點就是,antd-table的dataIndex和scopedSlots必須為同名,否則不生效,這是第二個坑,所以newdata在初始化數據要注意。之后編輯獲取到新的newdata,便可以通過$emit給父組件傳值,得到編輯后的效果。
以下為antd-table的部分實例代碼:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20const columns = [{
title: 'name',
dataIndex: 'name',
width: '25%',
scopedSlots: { customRender: 'name' },
}, {
title: 'operation',
dataIndex: 'operation',
scopedSlots: { customRender: 'operation' },
}]
const data = []
for (let i = 0; i < 100; i++) {
data.push({
key: i.toString(),
name: `Edrward ${i}`,
age: 32,
address: `London Park no. ${i}`,
})
}
總結
以上是生活随笔為你收集整理的antd table排序 vue_antd of Vue 之table组件踩坑记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: swiper鼠标hover停止自动轮播_
- 下一篇: java 语法 泛型_java-解密泛型