【澳门葡京】粗略明了vue中track,vue落成可增加和删除查改的战表单

前端变化见惯不惊,二零一八年NG火一片,今年react,vue火一片,ng硬着头皮看了几套教程,总被内部的概念绕晕,react是faceback出品,正在不断学习中,同期抽时间明白了vue,查看了vue官方文挡,看完卓殊入眼,总感到要拿来试一试手。

1.数码绑定

本文实例为我们分析了vue中track-by的质量,供大家参考,具体内容如下

世家都精通Vue.js是炎黄种人开创下来的,轻松易用,所以必供给协理一下

正好周未,做一个小成绩单玩玩,在此以前有用avalon也做过贰个近似的,从进程来看,贰个框架都在防止开拓者频仍操作dom,脱离dom苦海,安心管理数据业务逻辑,从一个示范来看,能够成倍的增加开采成效。

  1)vue

api:

Vue采用的MVVM设计方式

vue示例代码如下:

    把多少个常见对象传给Vued的data选项,Vue会遍历此指标的持有属性,并选拔Object.defineProperty将这么些属性全体转为getter/setter。Object.defineProperty为ES5的新属性,不或然模拟,所以vue不帮助IE8以及更低版本浏览器的缘由。用户看不到getter和setter但是vue内部做了追踪正视,在质量被访问和改换时通报变化。每种组件都有二个watcher对象,他会在组件渲染的进程中把质量记录为借助,之后当该属性的setter被调用时,会打招呼watcher重新总结,从而导致它涉及的零部件得以更新。

亲自去做地址:

也正是说model和view绑定
model退换,view的从头到尾的经过退换,反之亦然

<!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>

澳门葡京 1

无track-by境况:数据修改时,无论值是或不是被修改,dom都被再次渲染(调控台能够见到)

Vue主要有以下多少个至关心器重要字

在线测验地方:

【澳门葡京】粗略明了vue中track,vue落成可增加和删除查改的战表单。 

进入track-by属性:数据修改时,不改变多少所在的dom不被另行渲染,已改换的数额所在dom才被另行渲染

v-model 绑定模型
v-if 判定是还是不是出示该dom
v-show 判别是还是不是将该dom的display设为none
v-else if可能show为false时显示该dom
v-for 迭代
v-bind 绑定属性
v-on 绑定方法

一个VUE对象正是一个view model,基本由上边几部分构成

  vue异步试行dom更新,只要观察到属性别变化化,Vue将会敞开一个队列,并缓冲在同不平时候循环中生出的兼具数据变动。假设同三个watcher被触发数十遍,只会推入三遍。然后在下一个事变循环tick中,刷新队列并实施实际专门的学业。Vue.nextTick(callback)能够在下一次dom更新完后直接调用

track-by的二种选拔办法:

大家以一个可寻找的新闻保管连串为例子

澳门葡京 2

  2)react

1. 行使数据中某唯一字段,举个例子_uid

<!DOCTYPE html>
<html>

 <head>
 <meta charset="UTF-8">
 <title></title>
 <link rel="stylesheet" href="styles/demo.css" />
 </head>

 <body>
 <div id="app">
  key
  <!-- 绑定model中search.key -->
  <!-- 内容和下面每一列的数据进行比较 -->
  <!-- 内容改变,下面的每一列都马上会进行比较 -->
  <input type="text" v-model="search.key">
  <legend>
   Create New Person
  </legend>
  <div class="form-group">
   <label>Name:</label>
   <!-- 绑定model中newPerson.name -->
   <input type="text" v-model="newPerson.name"/>
  </div>
  <div class="form-group">
   <label>Age:</label>
   <!-- 绑定model中newPerson.age -->
   <input type="text" v-model="newPerson.age"/>
  </div>
  <div class="form-group">
   <label>Sex:</label>
   <!-- 绑定model中newPerson.sex -->
   <select v-model="newPerson.sex">
   <option value="Male">Male</option>
   <option value="Female">Female</option>
  </select>
  </div>
  <div class="form-group">
   <label></label>
   <!-- @click是v-on:click的缩写 -->
   <button @click="createPerson">Create</button>
  </div>
 </fieldset>
 <table>
  <thead>
  <tr>
   <th>Name</th>
   <th>Age</th>
   <th>Sex</th>
   <th>Delete</th>
  </tr>
  </thead>
  <tbody>
  <!-- 用v-for迭代,$index为每一个item的索引 -->
  <!-- v-if判断为true则显示,否则则移除,这里更适合用v-show,v-show并不会移除dom只会将display属性改为none -->
  <!-- 和搜索框内容进行比较 -->
  <tr v-for="person in people" v-if="person.name.indexOf(search.key)>=0||person.sex.indexOf(search.key)>=0||person.age==search.key">
   <td >{{ person.name }}</td>
   <!-- :style是v-bind:style的缩写,满足条件则值为前面的,否则为后面的,固定的字符串要用' ',变量不需要用'' -->
   <!-- v-bind后面还可以接其他的属性例如class,id -->
   <td :style="person.age>30 ? 'color: red' : ' ' ">{{ person.age }}</td>
   <!-- v-else元素必须立即跟在v-if或v-show元素的后面——否则它不能被识别 -->
   <td v-if="person.sex =='Male'">男</td>
   <td v-else>女</td>
   <td class="text-center"><button @click="deletePerson($index)">Delete</button></td>
  </tr>
  </tbody>
 </table>
 </div>
 </body>
 <script src="js/vue.js"></script>
 <script>
 // 初始化Vue
 //el获取绑定的标签,#app获取id为app的dom,.app的话则获取class为app的dom
 //data中为模型
 //methods为方法
 var vm = new Vue({
  el: '#app',
  data: {
  search:{
   key:""
  },
  newPerson: {
   name: '',
   age: 0,
   sex: 'Male'
  },
  people: [{
   name: 'Jack',
   age: 30,
   sex: 'Male'
  }, {
   name: 'Bill',
   age: 26,
   sex: 'Male'
  }, {
   name: 'Tracy',
   age: 22,
   sex: 'Female'
  }, {
   name: 'Chris',
   age: 36,
   sex: 'Male'
  }]
  },
  methods:{
  createPerson: function(){
   this.people.push(this.newPerson);
   // 添加完newPerson对象后,重置newPerson对象
   this.newPerson = {name: '', age: 0, sex: 'Male'}
  },
  deletePerson: function(index){
   // 删一个数组元素
   this.people.splice(index,1);
  }
  }
 })
 </script>

</html>

里头data主动存放当前view的个性相当于在页面上能用来绑定的多少,methods首要用来存当前view
model的格局,computed也是用来存当前view的品质的,只是它是精打细算属性,它的值可能由data里某一个值直接影响,约等于您改改了view里的data里的某三个值
,它会自动跟着修改,就想当于ng里用$watch来落到实处的作用,当前vue也提醒了$watch功效,可是用总计属性使用起来更急速高效。

    当某些组件的动静发生改造时,会以该零件为根。重新渲染整个组件树。单向数据流

<div id="example">
 <p v-for="item in items" track-by="_uid">
 {{item.message}}
 </p>
 <input type="button" value="修改" @click="modify"/>
 <input type="button" value="还原" @click="reduct"/>
</div>
// 初始数据
items: [
 { _uid: '111111', message: '111' },
 { _uid: '222222', message: '222' },
 { _uid: '333333', message: '333' },
 { _uid: '444444', message: '444' },
 { _uid: '555555', message: '555' }
]
// 修改成
modify: function () {
 this.items = [
 { _uid: '111111', message: '111' },
 { _uid: '666666', message: '222' },
 { _uid: '333333', message: '3333' },
 { _uid: '888888', message: '4444' },
 { _uid: '999999', message: '5555' }
 ]
}

不须求太多的解说,直接看代码就通晓Vue用法是何许

时下示范view model分析

  3)angular   

渲染效果如下图右(左侧无track-by,左侧有track-by),_uid和message都不改变的场所下,才不被重复渲染,只有首先组符合条件。

效果图

澳门葡京 3

    在每贰回像ui中绑定东西时都会往$watch队列中插入一条新的$watch,监视着model的变动。当模板加载实现时,angular会找到每三个directive然后生成必要的$watch。当用户触发能够被angular
context管理的事件时,digest循环就能被触发,digest循环会遍历全部的watch,然后询问是或不是有总体性和值的更动,直到全部的watch都被检查过。假设至少有八个watch发生退换就能再一次触发digest循环,直到全数watch都不会转移。为了防守Infiniti循环,当循环超过13遍就能够抛出拾贰分,就能抛出拾贰分。当$digest循环截至时,DOM相应会转移

澳门葡京 4

澳门葡京 5

那是最近的view
model属性,借使数据要绑定到html上去,可响应的那都要在这一块伊始定好,假诺一而再会用到的也要在开班的时候挂好岗位,中期手动加多是不会起效果的,此项目各字段作用具体看文字注释。

2.视图渲染

2. 利用$index,此外条件同上

代码小编已上传来github

澳门葡京 6

 

<div id="example">
 <p v-for="item in items" track-by="$index">
 {{item.message}}
 </p>
 <input type="button" value="修改" @click="modify"/>
 <input type="button" value="还原" @click="reduct"/>
</div>

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

那是此 view
model的议程,可直接绑定到html上也得以内部以this.开首来调用,内部的this都以指向当前view
model,能够调用当前view
model上的具有属性跟措施,这里也是大家管理多少,书写业务逻辑的地点,此示例项目各艺术效果具体看文字注释。

  1)vue

渲染效果如下图右,message的值第一、二条都没更换,所以一、二都不曾再一次渲染。

有关vue.js组件的课程,请大家点击专项论题vue.js组件学习课程展开学习。

澳门葡京 7

     vue.js不选拔Virtual
DOM而是采取真实的DOM作为模板,数据绑定在真正的沙盘上,使用重视追踪动了略微东西改换有一点点东西。

澳门葡京 8

上述就是本文的全体内容,希望对大家的就学抱有扶助,也冀望大家多多援助脚本之家。

此间是计量属性,它的值由data下的now艾德itCol来支配,也正是您写一个$watch方法在监听nowEditCol,可是此地vue内部帮你管理了,推荐在类型中运用。

  2)react

模板中还要选择message和_uid时,唯有两个都不变的境况下才不重复渲染,如下:

您大概感兴趣的稿子:

  • AngularJS框架的ng-app指令与机关加载完成形式剖析
  • JS数组再次来到去重后多少的方法解析
  • 澳门葡京,js达成复选框的全选和撤回全选效果
  • Node.js学习入门
  • 通过AngularJS实现图片上传及缩略图体现示例
  • JS落成简单的二元方程总计器成效示例
  • JS求解长富二遍方程组值的法子
  • 总结谈谈MySQL5.7
    JSON格式检索
  • Highcharts+NodeJS搭建数据可视化平台示例
  • 深入明白Angularjs向指令传递数据双向绑定机制
  • IOS与网页JS交互详解及实例
  • 逾期软件破解办法实例详解

近年来项目应用view
model格局,都以直接绑定在DOM成分上来做的,那也是看好的MVVM框架的方式.

    react的渲染创立在Vitual
DOM上(在内部存储器中陈说DOM树的数据结构)。当状态发生更换时,React会重新渲染Virtual
DOM,在计算后给真实DOM打补丁。它不行使数据观望机制,每一次换代都会另行渲染整个应用。在超大量数据的首屏渲染速度上有一定优势。因为Vue的渲染运行时做的可比多。

<div id="example">
 <p v-for="item in items" track-by="$index">
 {{item.message}} {{item._uid}}
 </p>
 <input type="button" value="修改" @click="modify"/>
 <input type="button" value="还原" @click="reduct"/>
</div>

澳门葡京 9

  3)angular 

澳门葡京 10

本人直接都有在摸底vue跟avalon
,ng,react那上头的东东,不过思虑到切入速度跟入手难受,作者先是选用的是vue,avalon,可是又由于vue的相称,假诺要运用vue就得摒弃

     angular1的原理是:HTML模板将会被浏览器分析到DOM中,DOM结构产生Angular编辑器的输入。angular将会遍历DOM模板,来扭转对应的ng指令,全部的下令都担负针对view来安装数据绑定。由此。NG框架是在DOM加载成功后才起来起效果的。

本文已被整理到了《Vue.js前端组件学习课程》,款待我们学习阅读。

安卓4.2以下的版本的原生浏览器,于是就起来应用avalon,用avalon
做过一些H5项目,可是由于avalon只是一个司徒正美个人项目总认为在一部分安宁和前程迈入上感觉

如上正是本文的全体内容,希望对我们的读书抱有匡助,也可望我们多多帮忙脚本之家。

很难说,在跑诸多测验案例的时候也发觉有个别BUG,当然在自己做的那多少个项目还尚无掉进avalon的西湾河,不过avalon的协作是值得赞赏的,司徒正美应该是消费了异常的大精力,

你或者感兴趣的小说:

  • 轻便理解vue中Props属性
  • Vue.js每一天必学之总结属性computed与$watch
  • 用Vue.js达成监听属性的变动
  • vue2.0赢得自定义属性的值
  • Vue
    第22中学ref属性的运用办法及注意事项
  • 简短明了vue中实例属性vm.$els
  • Vue.js每日必学之Class与体制绑定
  • Vue2达成组件props双向绑定
  • vue.js入门教程之绑定class和style样式
  • vue绑定设置属性的有余方法(5)

若是你做的花色要同盟到非规范的浏览仿佛IE6-7-8,又想体验MVVM框架开垦的快捷的时候,avalon是您的首推。在现阶段卓绝境况越来越好的意况,早先时期假诺再接到H5的类型,

笔者会选用用vue来做做项目。

更加多vue的求学理解,请查阅官方文挡:

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

上述就是本文的全体内容,希望对大家的求学抱有扶助,也盼望大家多多协助脚本之家。

你也许感兴趣的篇章:

  • js内置对象管理_打字与印刷学生战绩单的简短达成
  • 使用node+vue.js实现SPA应用
  • 利用mongovue把sqlserver数据导入mongodb的步子
  • 根据Vue.js的表格分页组件
  • imageVue的Slideshow模块使用技能
  • VUEJS实战之创设基础并渲染出列表(1)
  • Vuejs第十篇之vuejs父亲和儿子组件通信
  • Vue.js每一天必学之Class与体制绑定
  • JavaScript的Vue.js库入门学习课程
  • Vue.js每日必学之组件与组件间的通讯

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website