zoukankan      html  css  js  c++  java
  • 循环遍历与响应式数组更新

    v-for的语法格式:

    语法格式:v-for=(item, index) in items ,其中的index就代表了取出的item在原数组的索引值。

    v-for中的组件的key属性:

     官方推荐我们在使用v-for时,给对应的元素或组件添加上一个:key属性。 为什么需要这个key属性呢?

     这个其实和Vue的虚拟DOM的Diff算法有关系。 这里我们借用React’s diff algorithm中的一张图来简单说明一下:

    当某一层有很多相同的节点时,也就是列表节点时,我们希望插入一个新的节点 我们希望可以在B和C之间加一个F,Diff算法默认执行起来是这样的。 即把C更新成F,D更新成C,E更新成D,最后再插入E,是不是很没有效率? 所以我们需要使用key来给每个节点做一个唯一标识 Diff算法就可以正确的识别此节点 找到正确的位置区插入新的节点。 所以一句话,key的作用主要是为了高效的更新虚拟DOM。

    响应式数组更新

    因为Vue是响应式的,所以当数据发生变化时,Vue会自动检测数据变化,视图会发生对应的更新。Vue中包含了一组观察数组编译的方法,使用它们改变数组也会触发视图的更新。

    总结下来一共有7种方式。push()、pop()、shift()、unshift()、splice()、sort()、reverse()。

    1.我们先来说下push方法,在数组最后添加相应的元素。看如下代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app">
        <ul>
            <li v-for="item in letters">{{item}}</li>
        </ul>
        <button @click="btnclick">按钮</button>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        const app = new Vue({
            el:"#app",
            data:{
                letters:["a","b","c"]
            },
            methods:{
                btnclick(){
                this.letters.push('111',"222")
                }
            }
        })
    </script>
    </body>
    </html>

    2.pop方法,删除数组中的最后一个元素,实例如下代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app">
        <ul>
            <li v-for="item in letters">{{item}}</li>
        </ul>
        <button @click="btnclick">按钮</button>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        const app = new Vue({
            el:"#app",
            data:{
                letters:["a","b","c"]
            },
            methods:{
                btnclick(){
                this.letters.pop()
                }
            }
        })
    </script>
    </body>
    </html>

    3.shift方法,删除数组中的第一个元素,实例如下代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app">
        <ul>
            <li v-for="item in letters">{{item}}</li>
        </ul>
        <button @click="btnclick">按钮</button>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        const app = new Vue({
            el:"#app",
            data:{
                letters:["a","b","c"]
            },
            methods:{
                btnclick(){
                this.letters.shift()
                }
            }
        })
    </script>
    </body>
    </html>

    4.unshift方法,在数组最前面添加元素

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app">
        <ul>
            <li v-for="item in letters">{{item}}</li>
        </ul>
        <button @click="btnclick">按钮</button>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        const app = new Vue({
            el:"#app",
            data:{
                letters:["a","b","c"]
            },
            methods:{
                btnclick(){
                this.letters.unshift("l","j","y")
                }
            }
        })
    </script>
    </body>
    </html>

    5.splice方法。splice具体有三种作用,分别为删除元素、替换元素与插入元素。

    1.删除元素: 第二个参数传入你要删除几个元素(如果没有传,就删除后面所有的元素)
    2.替换元素: 第二个参数, 表示我们要替换几个元素, 后面是用于替换前面的元素
    3.插入元素: 第二个参数, 传入0, 并且后面跟上要插入的元素
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app">
        <ul>
            <li v-for="item in letters">{{item}}</li>
        </ul>
        <button @click="btnclick">按钮</button>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        const app = new Vue({
            el:"#app",
            data:{
                letters:["a","b","c"]
            },
            methods:{
                btnclick(){
                // this.letters.splice(1) 删除元素
                //     this.letters.splice(1,1,"ljy") 替换元素
                //     this.letters.splice(1,0,"aaa","bbb") 插入元素
                }
            }
        })
    </script>
    </body>
    </html>

    6.sort方法。sort() 方法用于对数组的元素进行排序。排序顺序可以是字母或数字,并按升序或降序。默认排序顺序为按字母升序。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app">
        <ul>
            <li v-for="item in letters">{{item}}</li>
        </ul>
        <button @click="btnclick">按钮</button>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        const app = new Vue({
            el:"#app",
            data:{
                letters:["cat","bat","ate"]
            },
            methods:{
                btnclick(){
              this.letters.sort()
                }
            }
        })
    </script>
    </body>
    </html>

    7.reverse方法。reverse() 方法用于颠倒数组中元素的顺序。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app">
        <ul>
            <li v-for="item in letters">{{item}}</li>
        </ul>
        <button @click="btnclick">按钮</button>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        const app = new Vue({
            el:"#app",
            data:{
                letters:["cat","bat","ate"]
            },
            methods:{
                btnclick(){
              this.letters.reverse()
                }
            }
        })
    </script>
    </body>
    </html>
     
  • 相关阅读:
    HDU 4705 Y
    POJ 3614 Sunscreen
    Aizu 2170 Marked Ancestor
    POJ 3616 Milking Time
    POJ 2385 Apple Catching
    POJ 2229 Sunsets
    HDU 4678 Mine
    树的重量
    579Div3
    迷途之家2019联赛
  • 原文地址:https://www.cnblogs.com/ljylearnsmore/p/14122623.html
Copyright © 2011-2022 走看看