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>
     
  • 相关阅读:
    jQuery 基本选择器
    JavaScriptif while for switch流程控制 JS函数 内置对象
    JavaScrip基本语法
    数据库 存储引擎 表的操作 数值类型 时间类型 字符串类型 枚举集合 约束
    数据库基础知识 管理员 用户登录授权的操作
    粘包的产生原理 以及如何解决粘包问题
    socket TCP DPT 网络编程
    2018年年终总结
    Android技术分享
    No accelerator found
  • 原文地址:https://www.cnblogs.com/ljylearnsmore/p/14122623.html
Copyright © 2011-2022 走看看