Vue教程28--检测数组更新

193 阅读1分钟

检测数组更新

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

  • 下面的操作都是响应式的:
    • push()
    • pop()
    • shift()
    • unshift()
    • splice()
    • sort()
    • reverse()
  • 这个操作除外
    • index_change通过下标修改值
 <!DOCTYPE html>
 <html lang="en">
 <head>
   <meta charset="UTF-8">
   <title>Title</title>
 </head>
 <body>
 <div id="app">
   <ul>
     <li v-for="item in letter">{{item}}</li>
   </ul>
   <button @click="btnClickPush">push</button>
   <button @click="btnClickPop">pop</button>
   <button @click="btnClickShift">shift</button>
   <button @click="btnClickUnshift">unshift</button>
   <button @click="btnClickSplice">splice</button>
   <button @click="btnClickSort">Sort</button>
   <button @click="btnClickReverse">reverse</button>
   <button @click="btnClickIndexChange">index_change</button>
   <button @click="btnClickVueSet">VueSet</button>
 </div>
 ​
 <script src="../vue.js"></script>
 ​
 <script>
   const app = new Vue({
     el:"#app",
     data:{
       letter:["A","B","C","D"]
     },
     methods:{
       btnClickPush:function (){
         this.letter.push("aaa")
       },
       btnClickPop:function (){
         this.letter.pop()
       },
       btnClickShift:function (){
         // shift删除数组中的第一个元素
         this.letter.shift()
       },
       btnClickUnshift:function (){
         // unshift在数组最前面增加元素
         this.letter.unshift("aaa")
       },
       btnClickSplice:function (){
         //删除一个元素
         this.letter.splice(2,1)
       },
       btnClickSort:function (){
         this.letter.sort()
       },
       btnClickReverse:function (){
         this.letter.reverse()
       },
       btnClickIndexChange:function (){
         //并不具有响应式
         this.letter[0] = "index_change"
       },
       btnClickVueSet:function (){
         //具有响应式
         Vue.set(this.letter,1,"vue_set")
       }
     }
   })
 </script>
 </body>
 </html>

效果展示:

动画20.gif

补充通过下标修改值不能做到响应式,我们可以使用Vue的set方法

动画21.gif