vue中key关键字的使用

解释
当使用v-for更新已经渲染过的元素列表时,默认用“就地复用”策略,如果数据项的顺序被改变,Vue.js将不会移动Dom元素来匹配数据项的顺序,就如在数组的尾部和数组的头部插入一个新的元素,所产生的的key值就会不同。
为了给Vue.js 追踪每个节点的身份,从而重用或重新排列现有的元素,需要提供一个唯一的Key属性特殊的属性使用v-bind来动态绑定值(全写“ v-bind:key” 简写“ :key”)

实例:
(1)未使用该关键字key,在数组对象中的头部插入一个新对象,添加之前,选中第四项 结果出错

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>key关键字的使用</title>

    <script src="lib/vue.js"></script>
</head>

<body>
    <div id="app">
        <div>
            <label>id</label><input type="text" v-model="id">
            <label>name</label><input type="text" v-model="Name">
            <input type="button" value="添加" @click="Add">
        </div>

        <p v-for="item in list">
            <input type="checkbox">
            {{item.id}}----{{item.Name}}
        </p>


    </div>
    <script>
        new Vue({
            el: '#app',
            data: {
                id: '',
                Name: '',
                list: [
                    { id: 1, Name: '张三' },
                    { id: 2, Name: '李四' },
                    { id: 3, Name: '王五' },
                    { id: 4, Name: '赵六' }
                ]
            },
            methods: {
                Add() {
                    // 在数组对象的尾部添加一个新的对象
                    // this.list.push({id:this.id, Name:this.Name})
                    //在数组对象的头部添加一个新的对象
                    this.list.unshift({id:this.id,Name:this.Name})
                }

            }
        })
    </script>
</body>

</html>

运行结果出错,选中项已经不在是 id:4 name:赵六
(2)添加key关键字之后 提前选中id:3 name:王五 结果正确,此处不建议使用v-bind的简写,容易出错。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>key关键字的使用</title>

    <script src="lib/vue.js"></script>
</head>

<body>
    <div id="app">
        <div>
            <label>id</label><input type="text" v-model="id">
            <label>name</label><input type="text" v-model="Name">
            <input type="button" value="添加" @click="Add">
        </div>

        <p v-for="item in list" v-bind:key="item.id">
            <input type="checkbox">
            {{item.id}}----{{item.Name}}
        </p>


    </div>
    <script>
        new Vue({
            el: '#app',
            data: {
                id: '',
                Name: '',
                list: [
                    { id: 1, Name: '张三' },
                    { id: 2, Name: '李四' },
                    { id: 3, Name: '王五' },
                    { id: 4, Name: '赵六' }
                ]
            },
            methods: {
                Add() {
                    // 在数组对象的尾部添加一个新的对象
                    // this.list.push({id:this.id, Name:this.Name})
                    //在数组对象的头部添加一个新的对象
                    this.list.unshift({id:this.id,Name:this.Name})
                }

            }
        })
    </script>
</body>

</html>

使用关键字key

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值