vue实现可增删查改的成绩单


Posted in Javascript onOctober 27, 2016

前端变化层出不穷,去年NG火一片,今年react,vue火一片,ng硬着头皮看了几套教程,总被其中的概念绕晕,react是faceback出品,正在不断学习中,同时抽时间了解了vue,查看了vue官方文挡,看完格外入眼,总觉得要拿来试一试手。

正好周未,做一个小成绩单玩玩,以前有用avalon也做过一个类似的,从过程来看,二个框架都在避免开发者频繁操作dom,脱离dom苦海,安心处理数据业务逻辑,从二个示例来看,可以成倍的提高开发效率。

vue示例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>vue成绩单</title>
 <style type="text/css">
 *{
 margin:0;
 padding:0;
 }
 .report_card{
 width:800px;
 margin:0 auto;
 font-size:12px;
 }
 .report_card table{
 width:100%;
 border-collapse: collapse;
 text-align:center;
 }
 .report_card caption{
 font-size:14px;
 text-align:left;
 line-height:30px;
 font-weight:bold;
 }
 .report_card table th,.report_card table td{
 border:1px solid #ccc;
 }
 .report_card table th{
 height:36px;
 background:#f8f8f8;
 }
 .report_card table td{
 height:32px;
 background:#f8f8f8;
 }
 .content{
 width:100%;
 height:32px;
 line-height:32px;
 position:relative;
 }
 .content input{
 position:absolute;
 top:0;
 left:0;
 width:100%;
 color:#999;
 padding-left:10px;
 -webkit-box-sizing:border-box;
 box-sizing:border-box;
 height:30px;
 border:1px solid blue;
 -webkit-animation:borderAn 2s infinite;
 animation:borderAn 2s infinite;
 }
 .studyForm select{
 width:100px;
 height:28px;
 }
 .searchInput{
 width:200px;
 height:28px;
 }
 .searchButton{
 width:100px;
 height:32px;
 }
 @-webkit-keyframes borderAn{
 0%{
 border-color:transparent;
 }
 100%{
 border-color:blue;
 }
 }
 @keyframes borderAn{
 0%{
 border-color:transparent;
 }
 100%{
 border-color:blue;
 }
 }
 .studyForm{
 margin:10px 0;
 }
 .studyForm input{
 width:120px;
 height:30px;

 }
 </style>
</head>
<body>
 <div class="report_card" id="reportCard">
 <table class="studyForm">
 <caption>成绩录入/处理</caption>
 <tbody>
 <tr>
  <td width="170">学号:<input type="text" v-model="addArr.stuId"></td>
  <td width="170">姓名:<input type="text" v-model="addArr.name"></td>
  <td width="170">语文:<input type="text" v-model="addArr.ywScores"></td>
  <td width="170">数学:<input type="text" v-model="addArr.sxScores"></td>
  <td colspan="2" width="120">
  <a href="javascript:void(0);" v-on:click="submitStu">录入</a>
  <a href="javascript:void(0);" v-on:click="resetStu">重置</a>
  </td>
 </tr>
 <tr>
  <td align="left">
  搜索:<input v-model="searchTxt" type="text" class="searchInput">
  </td>
  <td>
  排序字段:
  <select v-model='sortKey'>
  <option value="ywScores">语文</option>
  <option value="sxScores">数学</option>
  </select>
  </td>
  <td>
  排序类型:
  <select v-model="sortClass">
  <option value="1">升序</option>
  <option value="-1">降序</option>
  </select>
  </td>
  <td colspan="3"></td>
 </tr>
 </tbody>
 </table>
 <table class="scoreList">
 <caption>成绩列表</caption>
 <thead>
 <th width="170">学号</th>
 <th width="170">姓名</th>
 <th width="170">语文</th>
 <th width="170">数学</th>
 <th colspan="2" width="120">操作</th>
 </thead>
 <tbody>
 <tr v-for="item in studyArr | filterBy searchTxt | orderBy sortKey sortClass">
  <td><div class="content">{{item.stuId}}<input v-model="editArr.stuId" type="text" v-if="$index==nowEditCol"></div></td>
  <td><div class="content">{{item.name}}<input v-model="editArr.name" type="text" v-if="$index==nowEditCol"></div></td>
  <td><div class="content">{{item.ywScores}}<input v-model="editArr.ywScores" type="text" v-if="$index==nowEditCol"></div></td>
  <td><div class="content">{{item.sxScores}}<input v-model="editArr.sxScores" type="text" v-if="$index==nowEditCol"></div></td>
  <td>
  <a href="javascript:void(0);" v-on:click="startEdit($index)" v-if="$index!=nowEditCol">编辑</a>
  <a href="javascript:void(0);" v-on:click="cancelEdit" v-if="$index==nowEditCol">取消</a>
  <a href="javascript:void(0);" v-on:click="sureEdit($index)" v-if="$index==nowEditCol">确认</a>
  </td>
  <td><a href="javascript:void(0);" v-on:click="deleteStu($index)">删除</a></td>
 </tr>
 </tbody>
 </table>
 </div>
 <script type="text/javascript" src="vue.js"></script>
 <script type="text/javascript">
 var studyArrJson=[
 {'stuId':'stu0001','name':'张三','ywScores':85,'sxScores':90},
 {'stuId':'stu0002','name':'李四','ywScores':88,'sxScores':85},
 {'stuId':'stu0003','name':'王五','ywScores':65,'sxScores':75},
 {'stuId':'stu0004','name':'刘六','ywScores':58,'sxScores':96}
 ];
 var reportCardVm=new Vue({
 el:'#reportCard',
 data:{
 studyArr:studyArrJson,//成绩花名册
 addArr:{'stuId':'','name':'','ywScores':'','sxScores':''},//新增的表单字段
 nowEditCol:-1,//当前编辑的行
 editStatus:false,//当前是否在编辑状态
 searchTxt:'',//搜索字段
 sortKey:'ywScores',//排序健
 sortClass:'1',//升降排序1为升,-1为降
 },
 methods:{
 //启动索引index数据编辑
 startEdit:function(index){
  this.nowEditCol=index;
 },
 //取消编辑状态
 cancelEdit:function(){
  this.nowEditCol=-1;
 },
 //启动索引index数据修改确认
 sureEdit:function(index){
  this.studyArr.$set(index,this.editArr);
  this.nowEditCol=-1;
 },
 //删除索引index数据
 deleteStu:function(index){
  this.studyArr.splice(index,1);
 },
 //新增成绩
 submitStu:function(){
  var addArr={
  'stuId':this.addArr.stuId,
  'name':this.addArr.name,
  'ywScores':this.addArr.ywScores,
  'sxScores':this.addArr.sxScores
  };
  this.studyArr.push(addArr);
  this.resetStu();
 },
 //复位新增表单
 resetStu:function(){
  this.addArr={
  'stuId':'',
  'name':'',
  'ywScores':'',
  'sxScores':''
  }
 }
 },
 computed:{
 //存储当前编辑的对象
 editArr:function(){
  var editO=this.studyArr[this.nowEditCol];
  return {
  'stuId':editO.stuId,
  'name':editO.name,
  'ywScores':editO.ywScores,
  'sxScores':editO.sxScores
  }
 }
 }
 })
 </script>
</body>
</html>

在线测试地址:http://jsbin.com/kavugufuci/edit?html,output

一个VUE对象就是一个view model,基本由下面几部分组成

vue实现可增删查改的成绩单

其中data主动存放当前view的属性也就是在页面上能用来绑定的数据,methods主要用来存当前view model的方法,computed也是用来存当前view的属性的,只是它是计算属性,它的值可能由data里某一个值直接影响,相当于你修改了view里的data里的某一个值 ,它会自动跟着修改,就想当于ng里用$watch来实现的功能,当前vue也提示了$watch功能,但是用计算属性使用起来更快捷高效。

当前示例view model分析

vue实现可增删查改的成绩单

这是当前的view model属性,如果数据要绑定到html上去,可响应的那都要在这一块初始定好,如果后续会用到的也要在初始的时候挂好位置,后期手动添加是不会起作用的,此项目各字段功能具体看文字注释。

vue实现可增删查改的成绩单

这是此 view model的方法,可直接绑定到html上也可以内部以this.开头来调用,内部的this都是指向当前view model,可以调用当前view model上的所有属性跟方法,这里也是我们处理数据,书写业务逻辑的地方,此示例项目各方法功能具体看文字注释。

vue实现可增删查改的成绩单

这里是计算属性,它的值由data下的nowEditCol来决定,相当于你写一个$watch方法在监听nowEditCol,但是此处vue内部帮你处理了,推荐在项目中使用。

当前项目使用view model方式,都是直接绑定在DOM元素上来做的,这也是热门的MVVM框架的模式.

vue实现可增删查改的成绩单

我一直都有在了解vue跟avalon ,ng,react这方面的东东,但是考虑到切入速度跟入手难受,我首先选择的是vue,avalon,但是又由于vue的兼容,如果要使用vue就得放弃

安卓4.2以下的版本的原生浏览器,于是就开始使用avalon,用avalon 做过一些H5项目,但是由于avalon只是一个司徒正美个人项目总觉得在一些稳定性和未来发展上感觉

很难说,在跑很多测试案例的时候也发现一些BUG,当然在我做的那些项目还没有掉进avalon的大坑,但是avalon的兼容是值得称赞的,司徒正美应该是花费了很大精力,

如果你做的项目要兼容到非标准的浏览就如IE6-7-8,又想体验MVVM框架开发的高效的时候,avalon是你的首选。在目前兼容环境越来越好的情况,后期如果再接到H5的项目,

我会选择用vue来做做项目。

更多vue的学习了解,请查阅官方文挡:http://cn.vuejs.org/guide/,这也是你入手vue最佳地方。

本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。

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

Javascript 相关文章推荐
IE6下opacity与JQuery的奇妙结合
Mar 01 Javascript
jQuery实现表头固定效果的实例代码
May 24 Javascript
通过Javascript读取本地Excel文件内容的代码示例
Apr 08 Javascript
pace.js页面加载进度条插件
Sep 29 Javascript
Angular实现form自动布局
Jan 28 Javascript
微信QQ的二维码登录原理js代码解析
Jun 23 Javascript
浅析BootStrap Treeview的简单使用
Oct 12 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
Aug 23 jQuery
fetch 使用及如何接收JS传值
Nov 11 Javascript
JavaScript实现封闭区域布尔运算的示例代码
Jun 25 Javascript
ES6 fetch函数与后台交互实现
Nov 14 Javascript
vue实现数字动态翻牌的效果(开箱即用)
Dec 08 Javascript
vuex实现简易计数器
Oct 27 #Javascript
微信小程序  生命周期详解
Oct 27 #Javascript
require.js+vue开发微信上传图片组件
Oct 27 #Javascript
Javascript将字符串日期格式化为yyyy-mm-dd的方法
Oct 27 #Javascript
vue开发心得和技巧分享
Oct 27 #Javascript
js获取指定字符前/后的字符串简单实例
Oct 27 #Javascript
简单模拟node.js中require的加载机制
Oct 27 #Javascript
You might like
PHP similar_text 字符串的相似性比较函数
2010/05/26 PHP
PHP常用技术文之文件操作和目录操作总结
2014/09/27 PHP
php中base64_decode与base64_encode加密解密函数实例
2014/11/24 PHP
Yii2中SqlDataProvider用法示例
2016/09/22 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
javascript自定义in_array()函数实现方法
2015/08/03 Javascript
详解JavaScript的变量和数据类型
2015/11/27 Javascript
json定义及jquery操作json的方法
2016/10/03 Javascript
浅谈angular4实际项目搭建总结
2017/12/01 Javascript
Vue之Vue.set动态新增对象属性方法
2018/02/23 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
[01:01:25]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第三局
2016/02/27 DOTA
Python pickle模块用法实例分析
2015/05/27 Python
Python中for循环和while循环的基本使用方法
2015/08/21 Python
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
python 把数据 json格式输出的实例代码
2016/10/31 Python
Python实现PS滤镜的旋转模糊功能示例
2018/01/20 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
Python Pillow Image Invert
2019/01/22 Python
详解python实现交叉验证法与留出法
2019/07/11 Python
Pandas分组与排序的实现
2019/07/23 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
python 串口读取+存储+输出处理实例
2019/12/26 Python
使用python求斐波那契数列中第n个数的值示例代码
2020/07/26 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
2020/09/16 Python
适用于所有创业者的创业计划书
2014/02/05 职场文书
群众路线教育实践活动总结
2014/10/30 职场文书
人事主管岗位职责
2015/02/04 职场文书
教师工作证明范本
2015/06/12 职场文书
党纪处分决定书
2015/06/24 职场文书
2016年全国爱眼日宣传教育活动总结
2016/04/05 职场文书
阿里云服务器搭建Php+Apache运行环境的详细过程
2021/05/15 PHP
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL