vue增删改查的简单操作


Posted in Javascript onJuly 15, 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:;" @click="showOverlay(index)">修改</a> | <a href="javascript:;" @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 相关文章推荐
用Mootools获得操作索引的两种方法分享
Dec 12 Javascript
jquery预览图片实现鼠标放上去显示实际大小
Jan 16 Javascript
js使用正则实现ReplaceAll全部替换的方法
Jul 18 Javascript
jQuery EasyUI Tab 选项卡问题小结
Aug 16 Javascript
浅谈JavaScript 数据属性和访问器属性
Sep 01 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
Mar 04 Javascript
关于vue中 $emit的用法详解
Apr 12 Javascript
AngularJS中的作用域实例分析
May 16 Javascript
vue 组件中添加样式不生效的解决方法
Jul 06 Javascript
vue + elementUI实现省市县三级联动的方法示例
Oct 29 Javascript
js实现查询商品案例
Jul 22 Javascript
解决vue-cli输入命令vue ui没效果的问题
Nov 17 Javascript
JavaScript实现跟随滚动缓冲运动广告框
Jul 15 #Javascript
Javascript实现基本运算器
Jul 15 #Javascript
基于AngularJS的拖拽文件上传的实例代码
Jul 15 #Javascript
Javascript实现时间倒计时效果
Jul 15 #Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
Jul 15 #Javascript
JavaScript实现时间表动态效果
Jul 15 #Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
Jul 15 #Javascript
You might like
重量级动漫纷纷停播!唯独OVERLORD第四季正在英魂之刃继续更新
2020/05/06 日漫
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
2010/06/03 PHP
php中关于换行的实例写法
2019/09/26 PHP
Javascript Math对象
2009/08/13 Javascript
javascript 二维数组的实现与应用
2010/03/16 Javascript
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
JQuery插件iScroll实现下拉刷新,滚动翻页特效
2014/06/22 Javascript
javascript实现左右控制无缝滚动
2014/12/31 Javascript
深入剖析JavaScript:Object类型
2016/05/10 Javascript
Bootstrap实现登录校验表单(带验证码)
2016/06/23 Javascript
jquery-mobile基础属性与用法详解
2016/11/23 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
学习jQuery中的noConflict()用法
2018/09/28 jQuery
JS Math对象与Math方法实例小结
2019/07/05 Javascript
js实现一款简单踩白块小游戏(曾经很火)
2019/12/02 Javascript
微信小程序纯文本实现@功能
2020/04/08 Javascript
vue 需求 data中的数据之间的调用操作
2020/08/05 Javascript
[37:22]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第一局
2016/02/28 DOTA
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
[48:46]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第二场 11.19
2020/11/19 DOTA
[45:50]完美世界DOTA2联赛PWL S3 CPG vs Forest 第二场 12.16
2020/12/17 DOTA
python之模拟鼠标键盘动作具体实现
2013/12/30 Python
用Python脚本来删除指定容量以上的文件的教程
2015/05/04 Python
简单了解Python下用于监视文件系统的pyinotify包
2015/11/13 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
pygame实现简易飞机大战
2018/09/11 Python
Python性能分析工具py-spy原理用法解析
2020/07/27 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
2020/09/03 Python
迪奥美国官网:Dior美国
2019/12/07 全球购物
教师自我评价范文
2013/12/16 职场文书
太太口服液广告词
2014/03/20 职场文书
保密工作责任书
2014/04/16 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
三年级学生评语大全
2014/12/26 职场文书
环保建议书范文
2015/09/14 职场文书
会计专业2019暑假实习报告
2019/06/21 职场文书