• Vue循环渲染(v-for)


    1.v-for基本用法 

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

    2.v-for为什么要加key

    先看示例

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>v-for 指令</title>
            <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js" type="text/javascript" charset="utf-8"></script>
        </head>
        <body>
            <div id="app">
                <div>
                    <input type="text" v-model="name">
                    <button @click="add">添加</button>
                </div>
                <ul>
                    <li v-for="(item,i) in list">
                        <input type="checkbox"> {{item.name}}
                    </li>
                </ul>
                <br />
                <ul>
                    <li v-for="(item, i) in list" v-bind:key="item.id">
                        <input type="checkbox"> {{item.name}}
                    </li>
                </ul>
            </div>
        </body>
    </html>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                name: '',
                newId: 3,
                list: [{
                        id: 1,
                        name: 'xt1'
                    },
                    {
                        id: 2,
                        name: 'xt2'
                    },
                    {
                        id: 3,
                        name: 'xt3'
                    },
                ],
            },
            methods: {
                add() {
                    //注意这里是unshift
                    this.list.unshift({
                        id: ++this.newId,
                        name: this.name
                    })
                    this.name = ''
                }
            },
        });
    </script>

    没有key时,当选中xt2时,添加xt后选中的却是xt1,并不是我们想要的结果;有key时,当选中xt2时,添加xt后依旧选中的是xt2,是我们想要的结果。

    vue中列表循环需加:key="唯一标识" 唯一标识可以是item里面id index等,因为vue组件高度复用,增加Key可以标识组件的唯一性。

    3.v-if 与 v-for 一起使用

    当 v-if 与 v-for 一起使用时,v-for 具有比 v-if 更高的优先级。

    这意味着 v-if 将分别重复运行于每个 v-for 循环中。当你只想为部分项渲染节点时,这种优先级的机制会十分有用。

    有数据时显示循环列表,没有数据时显示暂无数据。

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>v-for 指令</title>
            <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js" type="text/javascript" charset="utf-8"></script>
        </head>
        <body>
            <div id="app">
                <ul v-if="todos.length>0">
                    <li v-for="todo in todos" v-bind:key="todo.id">
                        {{ todo.name }}
                    </li>
                </ul>
                <p v-else>暂时没有数据</p>
            </div>
        </body>
    </html>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                todos: [{
                        id: 1,
                        name: '列表1'
                    },
                    {
                        id: 2,
                        name: '列表2'
                    },
                    {
                        id: 3,
                        name: '列表3'
                    },
                ],
            },
        });
    </script>
    一辈子很短,努力的做好两件事就好;第一件事是热爱生活,好好的去爱身边的人;第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。
  • 相关阅读:
    IE 下 telerik RadAjaxManager 多次请求,LoadingPanel 点击消失
    Razor 越来越像 Rails 了
    MongoDB 初学
    Virtual PC 2007 SP1 中,Windows Server 2008 SP2 下安装 SQL Server 2008 R2
    VB 程序员:不要放松对自己的要求
    Linq to SQL bug: Char(1) maps to System.Char
    Linq to SQL: System.InvalidCastException: Specified cast is not valid
    ASP.NET 4: 允许对URL中的特殊字符串放宽要求
    IE 8 打开新 Tab 页报错 window.external.BuildNewTabPage()
    过完年了
  • 原文地址:https://www.cnblogs.com/antao/p/12875493.html
Copyright © 2020-2023  润新知