作者:潮人-小麦 | 来源:互联网 | 2023-08-19 20:29
uniapp 之 uni-table组件添加行点击事件
-
- 第一种方案(不改变导入的 tr 组件)
- 第二种方案(改变 tr 组件)
- 写在末尾
由于 uniapp官网的uni-table组件 并没有给出添加行点击事件的events
,于是自己想方法基于uni-table
组件实现了表格行点击事件;
第一种方案(不改变导入的 tr 组件)
姓名年龄地址{{ item.name }}{{ item.age }}{{ item.address }}
在mounted
生命周期里面找到行元素,并给每个行元素设置点击事件(表头行除外)
mounted() {let that = this; // 箭头函数的写法可省略这行代码let trDoms = document.getElementsByClassName('uni-table-tr');let len = trDoms.length;for(let i = 0; i {let row = this.tableData[i - 1];this.getCurrentRow(row);};// function 的写法:// item.onclick = function() {// let row = that.tableData[i - 1];// that.getCurrentRow(row);// };}}
},
methods: {getCurrentRow(row) {console.log(row);}
}
这里需要注意的是,不能在uniapp 自带的页面生命周期onLoad中使用,注意该生命周期的说明:
第二种方案(改变 tr 组件)
利用组件之间的通信
业务界面:
姓名年龄地址{{ item.name }}{{ item.age }}{{ item.address }}
methods: {rowclick(item) {console.log('item', item);}
}
tr
组件界面中给uni-table-tr
定义一个 click
事件
然后在tr
组件中的 methods
中定义方法给父组件调用
methods: {getRow() {this.$emit("row-click")},// 其他方法就不显示了。。。
}
完美实现!
写在末尾
这里的代码测试环境是在H5
环境中,未能进行多端测试是否兼容的问题;
如果是小程序端,由于获取不到dom
节点,可以考虑使用第二种方案试下。
如有不足,望大家多多指点! 谢谢!