Vue v-for的使用

1.迭代普通数组

在data中定义普通数组

data:{
      list:[1,2,3,4,5,6]
}

在html中使用 v-for 指令渲染

<p v-for="(item,i) in list">--索引值--{{i}}   --每一项--{{item}}</p>

2.迭代对象数组

在data中定义对象数组

data:{
      list:[1,2,3,4,5,6],
      listObj:[
        {id:1, name:'zs1'},
        {id:2, name:'zs2'},
        {id:3, name:'zs3'},
        {id:4, name:'zs4'},
        {id:5, name:'zs5'},
        {id:6, name:'zs6'},
      ]
}

在html中使用 v-for 指令渲染

<p v-for="(user,i) in listObj">--id--{{user.id}}   --姓名--{{user.name}}</p>

3.迭代对象

在data中定义对象

data:{
      user:{
        id:1,
        name:'托尼.贾',
        gender:'男'
      }
}

在html中使用 v-for 指令渲染

<p v-for="(val,key) in user">--键是--{{key}}--值是--{{val}}</p>

4.迭代数字

<!-- 注意:如果使用v-for迭代数字的话,前面 count 的值从 1 开始-->
<p v-for="count in 10">这是第{{count}}次循环</p>

完整代码:

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  </head>
<body>
  <div id='app'>
    <!--v-for循环普通数组-->
    <p v-for="(item,i) in list">--索引值--{{i}}   --每一项--{{item}}</p>
    <br/>
    <!--v-for循环对象数组-->
    <p v-for="(user,i) in listObj">--id--{{user.id}}   --姓名--{{user.name}}</p>
    <br/>
    <!--注意,在遍历对象的键值对的时候,除了有 val 和 key,在第三个位置还有一个索引-->
    <p v-for="(val,key) in user">--键是--{{key}}  --值是--{{val}}</p>
    <br/>
    <!-- in 后面我们放过数组、对象数组、对象,还可以放数字-->
    <!-- 注意:如果使用v-for迭代数字的话,前面 count 的值从 1 开始-->
    <p v-for="count in 10">这是第{{count}}次循环</p>
  </div>
</body>
<script src="vue.min.js"></script>
<script>
  var vm = new Vue({
    el:'#app',
    data:{
      list:[1,2,3,4,5,6],
      listObj:[
        {id:1, name:'zs1'},
        {id:2, name:'zs2'},
        {id:3, name:'zs3'},
        {id:4, name:'zs4'},
        {id:5, name:'zs5'},
        {id:6, name:'zs6'},
      ],
      user:{
        id:1,
        name:'托尼.贾',
        gender:'男'
      }
    }
  });
</script>
</html>

截图:

v-for的最佳使用技巧

在vuejs中,v-for 的使用是比较常见的,它允许您在模板代码中编写for循环。那么在使用v-for的时候,可曾思考过使用这个指令的一些技巧吗?

在介绍它的使用技巧之前,我先介绍下它的基本用法吧,在vue中v-for可以遍历数组、对象、字符串,但是用的最多的还是遍历数组,基本方法如下:

<div id="app">
    <ul>
  <li v-for='item in list'>
    {{ item.name }}
  </li>
</ul>
</div>

可能有些初学者在使用的过程中,不会考虑太多的使用技巧,直接遍历定义在data中的数据,其实vue在设计的初衷,也考虑到了这个问题,如果频繁使用data中的数据,可能会造成一些性能上的消耗,是相当不友好的。

在本篇文章中,我将介绍六种方法来使你的 v-for 代码更加精确,可预测和强大。

1.始终在v-for循环中使用key

建议在遍历数据的时候,都尽可能的加上key,设置一个惟一的键属性,它可以确保组件以您期望的方式工作。有些时候,可能使用索引index也可以,但是在一些特定的场景下,比如多场景登录下,如果不使用key来标识当前使用的登录方式,那么可能会造成数据的紊乱问题,如果数据量比较大, 页面的数据更新时会造成渲染数据消耗很大的性能甚至出现不可预测的bug,如果我们对每个元素都有唯一的键引用,那么我们就可以更好地准确地预测DOM将如何操作,就可以避免很多不必要的问题出现。

<div id="app">
    <ul>
  <li v-for='item in list'  :key='item.id'>
    {{ item.name }}
  </li>
</ul>
</div>

2.不要在循环中使用v-if

一个超级常见的错误是使用 v-if 来过滤 v-for 循环的数据。Vuejs优先考虑 v-for 而不是 v-if,这意味着组件将循环遍历每个元素,然后检查 v-if 条件以确定是否应渲染。因此,实际上,无论条件是什么,都将遍历数组。尽管这看起来很直观,但它会导致一个巨大的性能问题

/*千万不要这样写,切记切记*/
<div id="app">
    <ul>
  <li v-for='item in list'
      :key='item.id'
      v-if="item.price<50"
      >
    {{ item.name }}
  </li>
</ul>
</div>

3.使用计算属性或方法来处理数据后再做数据遍历

为避免上述问题,我们应该在遍历模板中的数据之前对其进行过滤。有两种非常相似的方法

  • 使用计算属性
  • 使用过滤方法

首先,我们只需要设置一个计算属性,为了获得与之前的v-if相同的功能,代码应如下所示。

<div id="app">
    <ul>
  <li v-for='item in underPrice'
      :key='item.id'
      >
    {{ item.name }}
  </li>
</ul>
</div>
<script>
  export default {
    data () {
      return {
        list: []
      }
    },
    computed: {
      underPrice: function () {
        return this.list.filter(item=> item.price < 50)
      }
    }
  }
</script>

计算属性是作为属性使用的,并不是方法。使用computed,可以将数据做缓存处理,在每次渲染数据的时候,会优先在缓存在找该数据,如果有了直接从缓存中取出渲染,如果没有的话再重新获取。这样也大大的提高了性能。

或者可以使用方式来进行变量的筛选以及处理再做遍历

<div id="app">
    <ul>
  <li v-for='item in underPriceHandle(50)'
      :key='item.id'
      >
    {{ item.name }}
  </li>
</ul>
</div>
<script>
  export default {
    data () {
      return {
        list: []
      }
    },
    methods: {
      underPriceHandle: function (price) {
        return this.list.filter(item=> item.price < price)
      }
    }
  }
</script>

4.在一个范围内循环

尽管大多数情况下,v-for 用于遍历数组或对象,但在某些情况下,我们肯定只希望循环执行一定次数。

例如,假设我们正在为在线商店创建一个分页系统,而我们只希望每页显示10个产品。使用一个变量来跟踪当前的页码,我们可以像这样处理分页。

<ul>
  <li v-for='index in 10' :key='index'>
    {{ books[page * 10   index] }}
  </li>
</ul>

5.在循环中访问项目的索引

除了遍历数组和访问每个元素之外,我们还可以跟踪每个项的索引。

为此,我们必须在项目后添加一个索引值,它非常简单,可用于分页,显示列表索引,显示排名等。

<ul>
  <li v-for='(item, index) in products' :key='item.id' >
   {{ index }}----{{ item.name }}
  </li>
</ul>

6.遍历一个对象

我们也可以使用v-for轻松地遍历对象的键值对。

与访问元素的索引类似,我们必须向循环中添加另一个值。如果我们用一个参数遍历一个对象,我们将遍历所有的项。

如果我们添加另一个参数,我们将获得items 和 key,如果添加第三个,我们还可以访问 v-for 循环的索引。

<ul>
  <li v-for='(list, index) in lists' :key='list.id' >
    <span v-for='(item, key, index) in list' :key='key'>
      {{ item }}
    </span>
  </li>
</ul>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持Devmax。 

Vue指令之v-for的使用说明的更多相关文章

  1. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  2. vue自定义加载指令v-loading占位图指令v-showimg

    这篇文章主要为大家介绍了vue自定义加载指令和v-loading占位图指令v-showimg的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  3. vue使用动画实现滚动表格效果

    这篇文章主要为大家详细介绍了vue使用动画实现滚动表格效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  4. 关于Vue 监控数组的问题

    这篇文章主要介绍了Vue 监控数组的示例,主要包括Vue 是如何追踪数据发生变化,Vue 如何更新数组以及为什么有些数组的数据变更不能被 Vue 监测到,对vue监控数组知识是面试比较常见的问题,感兴趣的朋友一起看看吧

  5. Vue子组件props从父组件接收数据并存入data

    这篇文章主要介绍了Vue子组件props从父组件接收数据并存入data的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  6. Vue h函数的使用详解

    本文主要介绍了Vue h函数的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  7. VUE响应式原理的实现详解

    这篇文章主要为大家详细介绍了VUE响应式原理的实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

  8. vue+Element ui实现照片墙效果

    这篇文章主要为大家详细介绍了vue+Element ui实现照片墙效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. vue+elemet实现表格手动合并行列

    这篇文章主要为大家详细介绍了vue+elemet实现表格手动合并行列,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. iview+vue实现导入EXCEL预览功能

    这篇文章主要为大家详细介绍了iview+vue实现导入EXCEL预览功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部