vue列表排序功能,vue递归渲染

  vue列表排序功能,vue递归渲染

  本文主要详细介绍了Vue的列表的渲染、排序和过滤。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下,希望能帮到你。

  :

目录

   1.列表(渲染、排序、过滤)1.1条件渲染指令1.1.1 v-show1.1.2 v-if1.1.3 v-if和小例v-show 1.1.4 V-for(键的原理)1.2列表过滤1.3列表排序汇总

  

1. 列表(渲染、排序、过滤)

  

1.1 条件渲染指令

  有个小技巧:

  如果是查找对象中不存在的属性,返回的是一个undefined,利用这一个点不管是v-show或者是v-if,如果值等于undefined的就不显示,假设sex属性不存在

  P-show= student.sex 性别:{{student.sex}}/p

  

1.1.1 v-show

  1.v-show的原理:通过display: none隐藏元素,满足条件时移除display: none样式。

  2.适用场景:切换频率高的场景。

  3.使用v-show隐藏元素时,可以得到,v-if不能。

  

1.1.2 v-if

  1.V-IF的原理:去掉整个节点,条件满足时再添加节点。

  2.v-else和v-else-if需要和v-if一起使用,但不能破坏结构。

  必须要先写v-if,例如:

  v-if=xxx

  v-else=xxx

  -

  v-if=xxx

  v-else-if=xxx

  v-else=xxx

  适用场景:切换频率低的场景。

  模板

  最大的特点是不破坏结构,但只能用v-if。

  

1.1.3 v-if和v-show的小案例

  div id=root

  h2n的当前值为:{{n}}/h2

  button @ Click= n Click me n plus 1/button

  Div= box1 v-show= true 喂!我是box1/div

  Div= box1 v-show= false 你好!我是box1/div

  你好!方框1/格

  我是box2/div

  我是box2/div

  我是box2/div

  !-

  3.V-else-if,V-else和V-if的区别

  -v-if必须写在v-else和v-else-if之前。

  -例如:

  控制显示

  控制显示

  控制显示

  这是做三个判断。

  -

  控制显示

  如果,否则

  如果,否则

  v-否则

  只要其中一个判断为真,下面的语句就不会被执行。

  -

  v-否则

  只要不满足v-if的条件就执行。

  -

  我是box31/div

  我是box32/div。

  我是box33/div。

  div class= box 3 v-elsehhhhhhh/div

  //满足条件时,只输出满足条件的值。例如,此示例输出“我是box31”

  !-

  要求:当n==2时,在页面上输出5个句子。

  4.模板

  -最大的特点是不破坏结构。

  -但只能和v-if一起用。

  -

  模板v-if=n===2

  H3:你好!/h3

  H3猜猜我是谁?/h3

  H3我是盒子4/h3。

  H3,你没事吧?/h3

  H3,你太棒了!/h3

  /模板

  /div

  脚本

  Vue.config.productionTip=false

  让vm=new Vue({

  el: #root ,

  数据:{

  n: 0,

  }

  })

  /脚本

  

1.1.4 v-for(key的原理)

  特点:

  1.你可以遍历数组。

  2.可以遍历对象。

  3.你可以遍历字符串。

  4.可以遍历的次数(很少使用)

  5.如果我们不写键,我们默认使用索引

  作用:用于显示列表的数据

  语法:v-for=(item,index) in xxx :key=yyy

  key的原理:(非常重要)

  1.虚拟DOM中key的作用:

  Key是虚拟DOM对象的标识符。当数据发生变化时,Vue会根据新的数据生成一个新的虚拟DOM,然后Vue会比较新的虚拟DOM和旧的虚拟DOM的差异。比较规则如下:

  (1).旧虚拟DOM中的找到和新虚拟DOM中的相同的key:

  如果虚拟DOM中的内容没有变化,直接使用之前的真实DOM。

  如果虚拟DOM中的内容发生变化,则生成新的真实DOM,然后替换页面中之前的真实DOM。

  (2)旧虚拟DOM中的未找到和新虚拟DOM中的相同的key直接新建一个真实DOM,然后渲染到页面上。

  2.如果使用索引作为关键字,将会导致以下问题:

  (1)如果逆序添加和逆序删除破坏了顺序操作,会有不必要的DOM更新,造成效果达不到的问题。

  (2)如果输入结构包含输入类的DOM元素,就会出现更新问题,比如输入框的数据不匹配等等。

  3.所以在开发过程中,最好使用唯一可识别的值作为key,比如id,Date.now(),nanoid,这个包npm i nanoid等等。

  

1.2 列表过滤

  使用computed

  div id=root

  Type= text placeholder=请输入关键字 v-model=keyword

  英国铁路公司

  保险商实验所

  Li v-for= filtername中的值:key=value.id

  { {数值.姓名}}-{ {数值.年龄} }-{ {数值.性别} }

  /李

  /ul

  /div

  脚本

  Vue.config.productionTip=false

  让vm=new Vue({

  el: #root ,

  数据:{

  arr: [

  {id: 001 ,姓名: 马冬梅,年龄:18,性别:女 },

  {id: 002 ,姓名: 周冬雨,年龄:55,性别:女 },

  {id: 003 ,姓名: 周杰伦,年龄:30,性别:男 },

  {id: 004 ,姓名: 郭,年龄:30,性别:男 },

  {id: 005 ,姓名: 郭德纲,年龄:30,性别:男 },

  ],

  关键字:“”

  },

  计算值:{

  过滤器名称:{

  get(){

  返回this.arr.filter((currentval)={

  return current val . name . index of(this . keyword)!==-1

  })

  }

  }

  }

  })

  /脚本

  使用watch

  div id=root

  Type= text placeholder=请输入关键字 v-model=keyword

  英国铁路公司

  保险商实验所

  Li v-for= value in filearr :key= value . id

  { {数值.姓名}}-{ {数值.年龄} }-{ {数值.性别} }

  /李

  /ul

  /div

  脚本

  /*共享阵列重复数据消除方法

  var arr=[1,35,612,6546,1.51]

  var newarr=arr.filter((val,index)={

  return arr.indexOf(val,0)===index

  })

  console . log(new arr);

  filter(函数(current,index,arr){return xxx})

  -return:写过滤条件。

  -返回符合条件的元素。

  索引:

  -第一个参数是:要查询的元素

  -第二个参数是:索引开始的位置。

  -它返回的值是当前元素的索引值,如果没有要查询的元素,则为-1。

  */

  Vue.config.productionTip=false

  让vm=new Vue({

  el: #root ,

  数据:{

  arr: [

  {id: 001 ,姓名: 马冬梅,年龄:18,性别:女 },

  {id: 002 ,姓名: 周冬雨,年龄:55,性别:女 },

  {id: 003 ,姓名: 周杰伦,年龄:30,性别:男 },

  {id: 004 ,姓名: 郭,年龄:30,性别:男 },

  {id: 005 ,姓名: 郭德纲,年龄:30,性别:男 },

  ],

  关键词:,

  filearr:[]

  },

  /*

  要求:当输入某个关键字时,会输出相关内容。

  想法:

  1.获取用户输入的数据。

  2.过滤输入关键字是否在数据中。

  */

  //先用手表写

  观察:{

  关键词:{

  即时:真的,

  处理程序(newval,oldval){

  这个。文件arr=this。由…改编过滤器((当前值)={

  返回电流值。姓名。(新值)的索引!==-1

  /*

  这里有个细节:索引关于去判断空字符串(不是空格)时会返回0,

  所以整个列表都会出来

  例如: asdf .的索引("")返回的是0

  所以需要向自调用一次使用马上

  */

  })

  }

  }

  }

  })

  /脚本

  

1.3 列表排序

  div id=root

  氘人员排序/h2

  输入类型=text placeholder=请输入关键字v-model=keyword

  按钮@click=type=2 年龄升序/按钮

  button @click=type=1 年龄降序/按钮

  button @click=type=0 原顺序/按钮

  保险商实验所

  Li v-for= val in filtername :key= val。id

  { {瓦尔。name } }-{ { val。年龄} }-{ { val。性别} }

  /李

  /ul

  /div

  脚本

  Vue.config.productionTip=false

  让vm=新Vue({

  el: #root ,

  数据:{

  arr: [

  { id: 001 ,名称: 马冬梅,年龄:18,性别:女},

  { id: 002 ,名称: 周冬雨,年龄:55,性别:女},

  { id: 003 ,名称: 周杰伦,年龄:50,性别:男},

  { id: 004 ,名称: 郭艾伦,年龄:59,性别:男},

  { id: 005 ,名称: 郭德纲,年龄:30,性别:男},

  ],

  关键词:,

  类型:0

  },

  计算值:{

  过滤器名称:{

  get(){

  设arr=this.arr.filter(当前)={

  返回当前。姓名。的索引。关键词)!==-1

  })

  arr.sort((a,b)={

  /*

  a永远在b前面

  如果返回的值是大于0则交换位置,小于等于0不交换位置

  返回美国罗克韦尔升序

  返回电离真空计降序

  */

  if(this.type)

  {

  返回这个. type==1?年龄年龄年龄

  }

  })

  返回arrive)

  }

  }

  }

  })

  /脚本

  

总结

  以上就是今天要讲的内容,本文介绍了和列表(渲染、排序、过滤)相关的知识,希望对大家有所帮助!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: