vue系列学习笔记_____列表渲染

1.v-for

使用v-for指令基于一个数组渲染一个列表。

<ul id="demo"><li v-for="item in items">{{item.message}}</li></ul>

var demo = new Vue({

    el:"#demo",

    data:{

        items:[

            {message:'Foo'},

            {message:'Bar'}

        ]

    }

});

特别说明:在v-for块内能访问父组件作用域内的属性已经数组索引$index;

<ul id="demo"><li v-for ="item in items">{{parentMessage}}-{{$index}}-{{item.message}}</li></ul>

var demo = new Vue({

    el:"#demo",

     data:{

        parentMessage:'Parent',

        items:[

              {message:'Foo'},

              {message:'Bar'}

        ]

     }

});

2.template v-for

        类似于template v-if,也可以将v-for用在<template>标签上,已渲染一个包含多个元素的块。

        <ul>

                <template v-for="item in items">

                        <li>{{item.msg}}</li>

                        <li class="divider"></li>

                </template>

        </ul>

3.数组变动检测

    (1).变异方法

            push()/pop()

            shift()/unshift()

            splice()

            sort()/reverse()

    (2).替换数组

    不会修改原数组而是返回一个新数组的非变异方法,直接用新数组替换旧数组

            demo.items = example.items.filter(function(item){

                return item.message.match(/Foo/);

            });

     filter()/concat()/slice()

    (3).track-by

            用去全新对象替换数组,使用track-by特性给Vue.js提示,尽可能地复用已有地实例。

            {items:[

                {_uid:'98989d',....},{_uid:'8980d678',....}

            ]}

             <div v-for="item in items" track-by="_uid">

                <!-- content-->

            </div>

    (4).track-by $index

            使用track-by="$index"强制让v-for进入原位更新模式

            片段不会被移动,而是简单地以对应索引的新值刷新。

            DOM节点不再映射数组元素顺序的改变,不能同步临时状态以及组件的私有状态

            所以,慎用这个指令

    (5).问题

            因为js的限制,Vue.js不能检测到以下数组变化

            直接用索引设置元素,如果vm.items[0] = {};

                    ===解决办法Vue.js扩展了观察数组,为他添加了一个$set()方法

                    demo.items.$set(0,{childMsg:'Changed!'})

            修改数据的长度,如:vm.items.length = 0

                    ===用一个空数组替换items

            ps:除了$set(),Vue.js也为观察数组添加了$remove()方法,用于从目标数组中查找并删除元素,在内部自动调用splice()

            之前的写法

            var index = this.items.indexOf(item);

            if(index !==-1){

                this.items.splice(index,1);

            }

            现在就很简单,只需一句话:this.items.$remove(item);

4.对象v-for

        可以用来遍历对象,除了$index之外,作用域还可以访问另外一个特殊变量$key。

        <ul id = "repeat=object" class="demo">

                <li v-for="value in object">{{$key}}:{{value}}</li>

        </ul>

        new Vue(

            el:"#repeate-object",

            data:{

                object:{

                    FirstName:'John',

                    LastName:'Doe',

                    Age:30

                }

            }

        );

5.值域v-for

        v-for也可以接收一个整数,此时它将重复模板数次。

        <div>

                <span v-for="n in 10">{n}</span>

        </div>

         0,1,2,3,4,5,6,7,8,9

6.显示过滤/排序的结果

        想要显示过滤/排序过的数组,同时不实际修改或重置原始数据,有两个方法:

                a.创建一个计算属性,返回过滤/排序过的数组;

                b.使用内置的过滤器filterBy和orderBy(例子见链接https://www.cnblogs.com/moqiutao/p/6383318.html)

        计算属性有更好的控制力,也更灵活,因为他是全功能的JavaScript,但是通常过滤器更方便

猜你喜欢

转载自blog.csdn.net/rookie_s/article/details/80300324