<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <div id="app"> {{name}} {{hobby}} {{xuge_obj}} <button @click="my_click">點擊改變數據</button> </div> <script> const app = new Vue({ el:"#app", data:{ name:"旭哥", hobby:["q","w","e"], xuge_obj:{ obj1:"12", obj2:"33" } }, methods:{ my_click:function () { //this.name = "xx" // this.hobby.push("湯") this.hobby[0] = "狼嚎" console.log(this.hobby) } }, watch:{ name:{ handler:function (val,oldval) { console.log(val), console.log(oldval) } }, //push改變數據的長度的時候,能夠監聽到數據改變 新舊值是同樣的 hobby:{ handler:function (val,oldval) { console.log(val), console.log(oldval) }, //deep爲深度監聽,深度監聽也監聽不到 deep:true } } }) </script> </body> </html>
這個時候 this.hobby[0] = "狼嚎" 沒法被監聽到,須要將 this.name = "xx"打開,html
由於這樣就更改了數值,會從新渲染頁面,this.hobby[0] = "狼嚎"便會被監聽到而且渲染到頁面vue
或者將this.hobby[0] = "狼嚎" 更改成 app.$set(this.hobby,0,"狼嚎")也會點擊後修改npm
在數據監聽中數組有不少的坑數組