vue+element-ui+slot-scope或原生实现可编辑表格(日历)
你们公司的产品是不是还在做一个可编辑表格功能?
1.前言
咱开发拿到需求大多数是去网上找成型的组件,找不到再看原生的方法能否实现,大牛除外哈,大牛一般喜欢封装组件框架。
2.思路
可编辑表格在后台管理系统还是比较常用的,因为比较流行框架element,iview都没有这个应用,所以考虑了两种方法,下面我简单说哈我的两种方法:vue+element实现表格跨行或跨列合并
3.方法一:
直接通过element的table组件中的cell-click和cell-dbclick监听表格事件,回调函数有四个参数row, column, cell, event,可以拿这些参数做相应的筛选,然后使用操作dom的方法添加input达到更改值的作用,贴上原生代码:
<template>
//表格也可以写成原生的table
<el-table :data="addPlanRoute" border style="width:100%" @cell-dblclick="tableDbEdit">
<el-table-column property="order1" label="顺序"></el-table-column>
<el-table-column property="order2" label="装车点">
<template slot-scope="scope">
<el-input v-model="scope.row.order2" placeholder="请输入内容"></el-input>
</template>
</el-table-column>
</el-table>
</template>
<script>
export default{
data(){
return{}
},
methods:{
tableDbEdit(row, column, cell, event) {
console.log(row, column, cell, event);
if (column.label != "顺序") {
event.target.innerHTML = "";
let cellInput = document.createElement("input");
cellInput.value = "";
cellInput.setAttribute("type", "text");
cellInput.style.width = "80%";
cell.appendChild(cellInput);
cellInput.onblur = function() {
cell.removeChild(cellInput);
event.target.innerHTML = cellInput.value;
};
}
}
}
}
</script>
这个方法确实可以实现功能,谁让原生js功能强大的。
4.方法二:
<1.>在element的table组件中使用slot-scope(作用域插槽)来实现该需求,就相当于将<el-input>直接作为<el-table-column>的子组件使用,不用绑定对应的方法,直接用:hover方法就可以修改<el-input>的样式
<2.>slot-scope可能有些人有点陌生,这里贴上官网的链接请戳这里,里面很详细
<el-table :data="addPlanRoute" border style="width:100%">
<el-table-column property="order1" label="顺序"></el-table-column>
<el-table-column property="order2" label="装车点">
<template slot-scope="scope">
<el-input v-model="scope.row.order2" placeholder="请输入内容"></el-input>
</template>
</el-table-column>
</el-table>
<3.>我开发的时候碰到一个大的问题是,el-table-column里面的值怎么传到el-input中去?
<4.>实际上slot-scope的值可以解决这个问题,vue原生slot-scope 的值将被用作一个临时变量名,可以接收父组件传过来的值, 而在element中的table对slot-scope的值封装成了一个大的对象,对象里面有属性row(行),column(列),$index(索引),store,所以我们可以通过scope.row拿到对应的值.
<5.>如果想详细了解slot-scope里面封装值的情况,可以将下面这个代码复制到vue文件中,在浏览器中就可以看到效果:
<el-table :data="addPlanRoute" border style="width:100%">
<el-table-column property="order1" label="顺序"></el-table-column>
<el-table-column property="order2" label="装车点">
<template slot-scope="scope">
<el-button size="mini" type="primary" @click="add(scope1)">添加</el-button>
</template>
</el-table-column>
</el-table>
<script>
methods:{
add(scope1){
console.log(scope1)
},
}
</script>
5.方法三:
直接在原生<table>里面嵌套<input>标签,然后通过改变样式来改变边框的显示,直接贴上代码,复制即可演示!
<template>
<div>
<table class="edit-table">
<thead>
<th>姓名</th><th>年龄</th><th>成绩</th><th>性别</th>
</thead>
<tbody>
<tr><td><input value="张三"/></td><td><input value="30"/></td><td><input value="90"/></td><td><input value="女"/></td></tr>
</tbody>
</table>
</div>
</template>
<script>
</script>
<style lang="scss">
.edit-table{
border:1px solid gray;
border-collapse: collapse;
th{
border:1px solid gray;
}
tbody{
tr{
td{
border:1px solid gray;
input{
border:none;
}
}
}
}
}
</style>
6.三种方法的对比
1.其实本质上都是利用<input>标签可以修改文本的特性;
2.方法三是最简单的可以利用<td>嵌套<input>直接实现表格的修改,还可以结合v-model来双向绑定数据,只是需要自己手动是修改下样式,
3.有个问题:如果是合并的行或列需要修改应该怎么实现?
这边首先要实现表格的合并功能,有篇文章讲的这个,vue+element实现表格跨行或跨列
然后可以套用这篇文章的三个方法
3.方法二如果项目在使用vue+element技术也是一种不错的选择
7.很开心你还能看到这里,棒棒哒!欢迎交流.
7.日历
日历可以直接对应将slot-scope里面的组件改为日期组件<el-date-picker>就可以
原文地址:https://segmentfault.com/a/1190000012554279
vue+element-ui+slot-scope或原生实现可编辑表格(日历)的更多相关文章
- vue+element ui 的表格列使用组件
前言:工作中用到 vue+element ui 的前端框架,有这个场景:很多表格的列有许多一样的,所以考虑将列封装为组件.转载请注明出处:https://www.cnblogs.com/yuxiaol ...
- 分享一个自搭的框架,使用Spring boot+Vue+Element UI
废弃,新的:https://www.cnblogs.com/hackyo/p/10453243.html 特点:前后端分离,可遵循restful 框架:后端使用Spring boot,整合了aop.a ...
- Vue + Element UI 实现权限管理系统
Vue + Element UI 实现权限管理系统 前端篇(一):搭建开发环境 https://www.cnblogs.com/xifengxiaoma/p/9533018.html
- vue + element ui 实现实现动态渲染表格
前言:之前需要做一个页面,能够通过表名动态渲染出不同的表格,这里记录一下.转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9786326.html 网站地址:我的 ...
- vue + element ui 表格自定义表头,提供线上demo
前言:工作中用到 vue+element ui 的前端框架,需要使用自定义表头,需要使用 re.转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9710826.h ...
- vue+element ui 的上传文件使用组件
前言:工作中用到 vue+element ui 的前端框架,使用到上传文件,则想着封装为组件,达到复用,可扩展.转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9 ...
- vue+element ui 的tab 动态增减,切换时提示用户是否切换
前言:工作中用到 vue+element ui 的前端框架,动态添加 Tab,删除 Tab,切换 Tab 时提示用户是否切换等,发现 element ui 有一个 bug,这里记录一下如何实现.转载 ...
- 基于 vue+element ui 的cdn网站(多页面,都是各种demo)
前言:这个网站持续更新中...,有网上预览,github上也有源码,喜欢记得star哦,欢迎留言讨论. 网站地址:我的个人vue+element ui demo网站 github地址:yuleGH g ...
- vue + element ui 阻止表单输入框回车刷新页面
问题 在 vue+element ui 中只有一个输入框(el-input)的情况下,回车会提交表单. 解决方案 在 el-form 上加上 @submit.native.prevent 这个则会阻止 ...
随机推荐
- video标签实现简单视频背景+遇到问题(视频无法显示,不能自动播放)
最近看网上有一些网站首页背景是炫酷的视频背景,就想模拟一个 1.video标签简介 video标签定义视频,就是可以在网页上实现视频的播放,详情见http://www.w3school.com.cn/ ...
- (2016北京集训十三)【xsy1531】魔法游戏 - Nim游戏
题解: 好题!我的结论很接近正解了... 把一个数化成二进制,每次至少要拿走一位,最多全拿走,不能不拿.那么这就是一个经典的Nim问题了,子树异或起来就是根节点的答案,随便递推一下就行了. 代码: # ...
- css font-family 字体组
介绍图片来自: http://www.runoob.com/cssref/css-websafe-fonts.html
- BZOJ 5180 [Baltic2016]Cities(斯坦纳树)
斯坦纳树的板子题. 斯坦纳树问题是组合优化问题,与最小生成树相似,是最短网络的一种. 最小生成树是在给定的点集和边中寻求最短网络使所有点连通. 而最小斯坦纳树允许在给定点外增加额外的点,使生成的最短网 ...
- java实现多个数字求和_图形化界面
一,设计思想 1,通过简单的窗口实现多个数字的输入与输出. 2,可通过用户输入数字的数量来实现多个数字的求和. 3,定义整型数组变量number和字符串型数组变量integer,将输入的字符串变量赋给 ...
- SpringCloud 构建微服务架构-练习
我使用的springboot的版本为2.0.2.RELEASE,这里概念性的东西我就不粘贴复制了,百度一下 都是 一.启动Eureka注册中心服务 1.新建springboot项目,pom.xml配置 ...
- php 中引入邮箱服务 , 利用第三方的smtp邮件服务
项目中用短信通知有时间限制,对一些频率比较大的信息力不从心. 使用邮箱发送信息是个不错的选择\(^o^)/! 首先要注册一个邮箱,在邮箱设置里开通smtp功能. 简单介绍下smtp,大概就是第三方客户 ...
- MySQL主从复制与读写分离(非原创,谢绝膜拜)
MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中, ...
- ASP.NET-AuthorizeAttribute做身份验证操作
代码顺序为:OnAuthorization-->AuthorizeCore-->HandleUnauthorizedRequest 如果AuthorizeCore返回false时,才会走H ...
- cogs 2752. [济南集训 2017] 数列运算
2752. [济南集训 2017] 数列运算 ★★☆ 输入文件:sequenceQBXT.in 输出文件:sequenceQBXT.out 简单对比时间限制:1 s 内存限制:512 ...