vue实现表格增删改查效果的实例代码


Posted in Javascript onJuly 18, 2017

整理文档,搜刮出一个vue实现表格增删改查效果的实例代码,稍微整理精简一下做下分享。

实现效果

vue实现表格增删改查效果的实例代码

我们把这些用户信息保存到list的数组中,然后增删改查就在这个数组上进行:

list: [
  {
    username: 'aaaaa',
    email: '123@qq.com',
    sex: '男',
    province: '北京市',
    hobby: ['篮球', '读书', '编程']
  },
  {
    username: 'bbbbb',
    email: 'bbbbbbb@163.com',
    sex: '女',
    province: '河北省',
    hobby: ['弹琴', '读书', '插画']
  }
  // ...
]

这里面的表单有:文本输入框,单选按钮,select选择框,复选框等。

1. 展示数据

我们的数据都放在数组list中,但是这里并不直接对list对循环输出,而是先把list中的数据给一个数组slist,对slist进行循环输出。因为我们在后面的查询功能中需要对数据进行过滤,数组list一直保存着原始数据(包括新增、修改后或已删除后),而数组slist只负责展示。

在vue中提供一个setSlist方法,将需要展示的数据给了数组slist:

// 获取需要渲染到页面中的数据
setSlist(arr) {
  this.slist = JSON.parse(JSON.stringify(arr));
}

然后在html中使用v-for把slist数组渲染出来:

<tr v-cloak v-for="(item, index) of slist">
  <td></td>
  <td></td>
  <td></td>
  <td></td>
  <td></td>
  <td></td>
  <td><a href="javascript:;" rel="external nofollow" rel="external nofollow" @click="showOverlay(index)">修改</a> | <a href="javascript:;" rel="external nofollow" rel="external nofollow" @click="del(index)">删除</a></td>
</tr>

 在操作这一栏中,给修改和删除操作绑定上事件。

2. 增加和删除功能

把增加功能和删除合并到一起,是这两个功能相对来说都比较简单。

增加用户时使用push方法,把用户的信息添加到list数组的最后:

this.list.push({
  username: 'ffff',
  email: 'fffffff@163.com',
  sex: '女',
  province: '河南省',
  hobby: ['弹琴', '插画']
});

这样就能添加一位ffff的用户了。

删除用户时,通过splice(index, 1),可以删除index位置的数据,页面上的数据自动就会更新。

3. 修改功能

假设我们弹层里的数据是selectedlist,那么每次修改时,把index位置的数据给了selectedlist,然后在弹层中修改selectedlist。我们也能看到修改数据的类型: 文本框(用户名,邮箱),单选按钮(性别),select选择框(所在省份),多选框(爱好),这里我们主要练习的是表单处理(https://cn.vuejs.org/v2/guide/forms.html)。弹层是否显示用变量isActive来控制:

// 修改数据
modifyData(index) {
  this.selected = index; // 修改的位置
  this.selectedlist = this.list[index];
  this.isActive = true;
}

有没有发现一个问题,当修改弹层中的信息时,表格中的数据也同步更新了。可是我们本身是希望当点击保存按钮时,才把弹层中的数据保存到表格里。问题的根源就出在这里:

this.selectedlist = this.list[index];

因为list[index]是个Object类型的数据,若使用=赋值,则赋值操作为浅度拷贝(把数据的地址赋值给对应变量,而没有把具体的数据复制给变量,变量会随数据值的变化而变化),selectedlist与list[index]使用相同的数据地址,互相引起数据值的变化。因此这里我们需要进行深度拷贝:

this.selectedlist = JSON.parse( JSON.stringify(this.list[index]) ); // 先转换为字符串,然后再转换

当用户修改数据后,selectedlist就会发生变化,点击保存按钮时,将数据重新保存到index位置:

/*
 this.list 数据数组
 this.selected 刚才修改的位置
 this.selectedlist 需要保存的数据
*/
Vue.set(this.list, this.selected, this.selectedlist);

4. 查询功能

在第1小节中我们已经说过,在页面表格中展示的是slist中的数据,就是为了方便执行查询操作:

// 获取需要渲染到页面中的数据
setSlist(arr) {
  this.slist = JSON.parse(JSON.stringify(arr));
}

每次根据某些条件将过滤后的数据赋值给slist数组,展示出查询后的数据。这里我们的查询实现了两个小功能:

1.用户在输入某个字符后,自动在输入框下方用列表展示出用户可能要查询的词语(如用户名等)

2.同步更新表格中的数据

这里我们通过用户名和邮箱进行查询,因此在过滤数据时,需要检测用户名和邮箱是否含有查询的单词。我们先给输入框绑定一个input事件,同时用datalist展示用户可能要查询的词语:

<input type="text" placeholder="search" @input="search" list="cars" class="search">
<datalist id="cars">
  <option v-for="item in searchlist" :value="item"></option>
</datalist>

search功能的实现,searchlist为在输入框下方展示的可能要搜索的词语,ss数组则保存过滤后的数据,当循环完毕后,设置调用setSlist方法修改slist数组:

每当用户输入或者删除一个字符时都会调用search方法,执行查询操作,当用点击展示词语列表时,也会调用search方法。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript使用百度地图api和html5特性获取浏览器位置
Jan 10 Javascript
c#+jquery实现获取radio和checkbox的值
Sep 12 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
May 06 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
May 05 Javascript
Angular ng-repeat 对象和数组遍历实例
Sep 14 Javascript
微信小程序实现下载进度条的方法
Dec 08 Javascript
浅谈es6中export和export default的作用及区别
Feb 07 Javascript
JavaScript遍历DOM元素的常见方式示例
Feb 16 Javascript
Vue CLI3中使用compass normalize的方法
May 30 Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
Aug 22 Javascript
JavaScript生成一个不重复的ID的方法示例
Sep 16 Javascript
微信小程序canvas实现签名功能
Jan 19 Javascript
js canvas实现适用于移动端的百分比仪表盘dashboard
Jul 18 #Javascript
vue深入解析之render function code详解
Jul 18 #Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
Jul 18 #jQuery
浅谈JS封闭函数、闭包、内置对象
Jul 18 #Javascript
iscroll实现下拉刷新功能
Jul 18 #Javascript
vue.js实现单选框、复选框和下拉框示例
Jul 18 #Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
Jul 18 #Javascript
You might like
转生史莱姆:萌王第一次撸串开心到飞起,哥布塔撸串却神似界王神
2018/11/30 日漫
PHP+ACCESS 文章管理程序代码
2010/06/21 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
2017/06/15 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
2018/04/12 PHP
DWR Ext 加载数据
2009/03/22 Javascript
jquery multiSelect 多选下拉框
2010/07/09 Javascript
关于js日期转化为毫秒数“节省20%的效率和和节省9个字符“问题
2012/03/01 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
2013/08/28 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
js 动态修改css文件的方法
2014/08/05 Javascript
java、javascript实现附件下载示例
2014/08/14 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
2016/08/31 Javascript
JSON 数据详解及实例代码分析
2017/01/20 Javascript
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
基于vuejs实现一个todolist项目
2017/04/11 Javascript
JS简单获取日期相差天数的方法
2017/04/24 Javascript
javascript实现Emrips反质数枚举的示例代码
2017/12/06 Javascript
详解如何实现Element树形控件Tree在懒加载模式下的动态更新
2019/04/25 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
vue组件中节流函数的失效的原因和解决方法
2020/12/02 Vue.js
python3.4.3下逐行读入txt文本并去重的方法
2018/04/29 Python
Python requests发送post请求的一些疑点
2018/05/20 Python
python topN 取最大的N个数或最小的N个数方法
2018/06/04 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
基于matplotlib xticks用法详解
2020/04/16 Python
python脚本定时发送邮件
2020/12/22 Python
ivx平台开发之不用代码实现一个九宫格抽奖功能
2021/01/27 HTML / CSS
Kendra Scott官网:美国领先的时尚配饰品牌
2020/10/22 全球购物
小学教师暑期培训方案
2014/08/28 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
材料员岗位职责范本
2015/04/11 职场文书
2015年招生工作总结
2015/05/04 职场文书
企业开发CSS命名BEM代码规范实践
2022/02/12 HTML / CSS