vue教程-v-for指令(循环)

介绍

v-for 指令循环数组,进行渲染。
v-for 指令 相当于 for in 循环语句,需要使用 item in items 形式,其中 items 是源数据数组,而 item 则是被迭代的数组元素的别名。

注意: 永远不要把 v-if 和 v-for 用在同一个元素上

例子

html

<ul id="app">
    <li v-for="item in books" :key="item">
        {{ item }}
    </li>
</ul>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>

js

<script>
var app = new Vue({
  el: '#app',
  data: {
    books: ['html从入门到放弃','css从入门到入坟','葵花宝典']
  }
})
</script>

key的作用

为了方便vue区分各个元素,从而重用和重新排序现有元素,需要为每项提供 key 属性,其值 唯一

作用:

  • 提高性能
  • 是 Vue 识别节点的一个通用机制,key 不仅与 v-for 关联,还有其它用途。

建议在使用 v-for 时提供 key 属性,除非遍历输出的 DOM 内容非常简单,或者是刻意依赖默认行为以获取性能上的提升。

如下:

<ul id="app">
    <li v-for="item in books" :key="item">
        {{ item }}
    </li>
</ul>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>

注意:
不要使用对象或数组之类的非基本类型值作为 v-for 的 key。请用字符串或数值类型的值

报错

如果 key 值相同会报错,如下图:

代码如下:

<ul id="app">
    <li v-for="item in books" :key="item">
        {{ item }}
    </li>
</ul>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>
<script>
var app = new Vue({
  el: '#app',
  data: {
    books: ["java","vue","html","vue","java"]
  }
})
</script>

例子-显示索引

html

<ul id="app">
    <li v-for="(item,index) in books" :key="index">
        {{index}}. {{ item }}
    </li>
</ul>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>

注意::key 也可以是 索引

js

<script>
var app = new Vue({
  el: '#app',
  data: {
    books: ['html从入门到放弃','css从入门到入坟','葵花宝典']
  }
})
</script>

例子:json数组

html

<div id="app">
    <div v-for="item in books" :key="item.name">
        {{ item.name }}
    </div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>

js

<script>
var app = new Vue({
  el: '#app',
  data: {
    books: [
      { name: 'html从入门到放弃' },
      { name: 'css从入门到入坟' },
      { name: '葵花宝典' }
    ]
  }
})
</script>

复杂例子:json数组

实现头条新闻功能

数组中的元素是 对象,对象中有以下属性:

  • title:标题
  • author:作者
  • url:超链接

标题有 a 标签,点击可以打开网页

html

<div id="app">
    <table border="1">
        <tr>
            <td>序号</td>
            <td>标题</td>
            <td>作者</td>
        </tr>
        <tr v-for="(item,index) in books" :key="index">
            <td>{{index+1}}</td>
            <td><a :href="item.url" target="_blank">{{item.title}}</a></td>
            <td>{{item.author}}</td>
        </tr>
    </table>

</div>

js

<script>
    let vue = new Vue({
        el:"#app",
        data:{
            books: [
                { title: 'html从入门到放弃',author:"李雷",url:"http://www.baidu.com" },
                { title: 'css从入门到入坟',author:"lucy",url:"http://www.toutiao.com" },
                { title: '葵花宝典',author:"lili",url:"http://www.jd.com" }
            ]
        }
    })
</script>

嵌套循环

html

<div id="app">
    <table border="1">
        <tr>
            <td>序号</td>
            <td>书名</td>
            <td>价格</td>
            <td>作者</td>
            <td>标签</td>
            <td>操作</td>
        </tr>
        <tr v-for="(item,index) in books2" :key="index">
            <td>{{index+1}}</td>
            <td>{{item.name}}</td>
            <td>{{item.price}}</td>
            <td >
                <span v-for="(tag,tagIndex) in item.tag" :key="tagIndex">
                {{tag}}
                </span>
            </td>
            <td>{{item.author}}</td>
            <td>
                <a href="">修改</a>
                <a href="">删除</a>
            </td>
        </tr>
    </table>
</div>

js

<script>
    let vue = new Vue({
        el:"#app",
        data:{
            books2: [
                { id:10,name: 'html从入门到放弃',price:20,author:"李雷",tag:["计算机","前端"] },
                { id:20,name: 'css从入门到入坟',price:30,author:"lucy",tag:["计算机","前端"] },
                { id:30,name: '葵花宝典',price:40,author:"lili",tag:["武林秘籍","男人必练"] }
            ]
        }
    })
</script>

例子3-axios

html

<div id="app">
    <table border="1">
        <tr>
            <td>书名</td>
            <td>操作</td>
        </tr>
        <tr v-for="item in books" :key="item.name">
            <td>{{ item.name }}</td>
            <td>
                <a href="#">删除</a>&nbsp;&nbsp;
                <a href="#">修改</a>
            </td>
        </tr>
    </table>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>
<script src="https://cdn.staticfile.org/axios/0.20.0/axios.min.js"></script>

js

<script>
var app = new Vue({
    el: '#app',
    data: {
        books:[]
    },
    mounted:function(){
        that=this
        axios.get('/array.json').then(function(res){
            console.log(res)
            console.log(res.data.books)
            that.books=res.data.books
        })
    }
})
</script>

array.json文件内容

{
    "books": [
            { "name": "html从入门到放弃" },
            { "name": "css从入门到入坟" },
            { "name": "葵花宝典" }
        ]
}

原文出处:/show_1IXIyE8oBGB.html