v-for详细

1.v-for遍历数组与对象,我实验后发现后面接in或of效果是一样的(可能也有什么是我没发现的,后面遇到了再来改),数组可设置两个参数,对象可设置三个(多一个键值属性)。

<body>
    <div id="root">
        <ul>
            <li v-for="item in names">{{item}}</li>
            <li v-for="(item,index) in names">{{item}}-{{index}}</li>
            <li v-for="(item,key,index) in persons">{{item}}-{{key}}-{{index}}</li>
        </ul>
    </div>
    <script>
        const vm = new Vue({
            el: "#root",
            data() {
                return {
                    names: ['张三', '李四', '王五'],
                    persons: { realname: "张三", sex: "男", age: 19 }
                }
            }
        })
    </script>
</body>

2、v-for内key的使用

在vue中,每一个组件都有一个render函数,这个函数会生成一个虚拟dom,这就意味着每一个组件都对应一个虚拟dom树。

在v-for遍历时,所有数据会先在虚拟dom中,然后虚拟dom再遍历到页面。这样当数据发生改变时效率会更高,因为再虚拟dom中新数据与旧数据会发生对比,相同的就不会改变。这就要提到另一个元素key了(所以key最好设置成唯一值且不会变,例手机号、身份证等),通过比较key值,旧数据有的不动。如果不加key,会按照遍历顺序添加key值,不过这样key就不是唯一的了。

不加key:

<body>
    <div id="root">
        <ul>
            <li v-for="(item,index) in person">{{item.name}}--<input type="text"></li>
        </ul>
        <button @click="addData">添加</button>
    </div>

    <script>
        const vm = new Vue({
            el:"#root",
            data(){
                return {
                    list:{id:4,name:'熊大'},
                    person:[{
								id: 1,
								name: '张三',
							},
							{
								id: 2,
								name: '李四',
							},
							{
								id: 3,
								name: '王五',
							}
						]
                }
            },
            methods:{
                addData(){
                    this.person.unshift(this.list)
                }
            }
        })
    </script>

 添加key:

<div id="root">
 <ul>
  <li v-for="(item,index) in person" :key="item.id">{{item.name}}--<input type="text"></li>
  </ul>
  <button @click="addData">添加</button>
 </div>

3、数组的响应方式。不能使用this.arr[1] 数组内部内容已经更改,但不会渲染到页面。

<body>
    <div id="root">
        <div>{{name}}</div>
        <ul>
            <li v-for="item in arr">{{item}}</li>
        </ul>
        <div>{{obj.username}}--{{obj.age}}</div>
        <br>
        <button @click="change">更改</button>
    </div>

    <script>
        const vm = new Vue({
            el: "#root",
            data() {
                return {
                    name: "张三",
                    arr: ['a', 'b', 'c'],
                    obj: { username: "李四", age: 18 }
                }
            },
            methods: {
                change(){
                    // this.name = '李四';
                    this.arr[1] = 'fff'
                    // this.obj.username = "王五"
                }
            }
        })
    </script>
</body>

 

this.arr.splice(1,1);

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值