1. 程式人生 > 其它 >vue學習---深度監視

vue學習---深度監視

深度監視: (1).Vue中的watch預設不監測物件內部值的改變(一層)。 (2).配置deep:true可以監測物件內部值改變(多層)。 備註: (1).Vue自身可以監測物件內部值的改變,但Vue提供的watch預設不可以! (2).使用watch時根據資料的具體結構,決定是否採用深度監視。
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>天氣案例_深度監視</title>
        <!-- 引入Vue -->
<script type="text/javascript" src="../js/vue.js"></script> </head> <body> <!-- 深度監視: (1).Vue中的watch預設不監測物件內部值的改變(一層)。 (2).配置deep:true可以監測物件內部值改變(多層)。 備註: (1).Vue自身可以監測物件內部值的改變,但Vue提供的watch預設不可以! (2).使用watch時根據資料的具體結構,決定是否採用深度監視。
--> <!-- 準備好一個容器--> <div id="root"> <h2>今天天氣很{{info}}</h2> <button @click="changeWeather">切換天氣</button> <hr/> <h3>a的值是:{{numbers.a}}</h3> <button @click="numbers.a++">
點我讓a+1</button> <h3>b的值是:{{numbers.b}}</h3> <button @click="numbers.b++">點我讓b+1</button> <button @click="numbers = {a:666,b:888}">徹底替換掉numbers</button> {{numbers.c.d.e}} </div> </body> <script type="text/javascript"> Vue.config.productionTip = false //阻止 vue 在啟動時生成生產提示。 const vm = new Vue({ el:'#root', data:{ isHot:true, numbers:{ a:1, b:1, c:{ d:{ e:100 } } } }, computed:{ info(){ return this.isHot ? '炎熱' : '涼爽' } }, methods: { changeWeather(){ this.isHot = !this.isHot } }, watch:{ isHot:{ // immediate:true, //初始化時讓handler呼叫一下 //handler什麼時候呼叫?當isHot發生改變時。 handler(newValue,oldValue){ console.log('isHot被修改了',newValue,oldValue) } }, //監視多級結構中某個屬性的變化 /* 'numbers.a':{ handler(){ console.log('a被改變了') } } */ //監視多級結構中所有屬性的變化 numbers:{ deep:true, handler(){ console.log('numbers改變了') } } } }) </script> </html>