亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue中如何watch監聽屬性

發布時間:2021-12-03 13:33:07 來源:億速云 閱讀:429 作者:小新 欄目:開發技術

這篇文章主要介紹了Vue中如何watch監聽屬性,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

首先要確認 watch是一個對象,要當成對象來使用。

鍵:就是那個,你要監聽的那個家伙;

值:可以是函數,當你監控的家伙發生變化時,需要執行的函數,這個函數有兩個形參

第一個是當前值(新的值),第二個是更新前的值(舊值)

值也可以是函數名:不過這個函數名要用單引號來包裹。

值是包括選項的對象:選項包括有三個。

  • 1.第一個 handler:其值是一個回調函數。即監聽到變化時應該執行的函數。

  • 2.第二個是 deep:其值是 true 或 false;確認是否深入監聽。(一般監聽時是不能監聽到對象屬性值的變化的,數組的值變化可以聽到。)

  • 3.第三個是 immediate:其值是 true 或 false;確認是否以當前的初始值執行 handler 的函數。

一.watch監聽一般數據的變化(數值,字符串,布爾值)

舉例說明:

1.數值

data數據中心的num,當我們通過點擊事件讓它發生變化時,通過watch監聽屬性監聽它的變化

<div id="app">
        <p>{{num}}</p>
        <button @click="num++">點擊加一</button>
    </div>
      let vm = new Vue({
            el:'#app',
            data:{
                num:0
            },
            watch:{
            // 當前值(已經改變的值)newval  舊值 oldval
                num:function(newval,oldval){
                    console.log("新值是:"+newval);
                    console.log("舊值是:"+oldval);
                }
            }
        })

當我們點擊按鈕時,查看控制臺:

Vue中如何watch監聽屬性

 注意:在watch中還有其他兩種方法

 watch:{
            // 當前值(已經改變的值)newval  舊值 oldval
                // num(newval,oldval){
                //     console.log("新值是:"+newval);
                //     console.log("舊值是:"+oldval);
                // }
                num:{
                    handler(newval,oldval){
                    console.log("新值是:"+newval);
                    console.log("舊值是:"+oldval);
                    }
                }
            }

輸出結果是一致的,下面的例子統一使用第三種方法,也就是帶handler的方法。

2.字符串

<div id="app">
        <input type="text" v-model="mes">
        <p>輸入的內容為:{{mes}}</p>
    </div>
 let vm = new Vue({
            el:'#app',
            data:{
                mes:''
            },
            watch:{
                mes:{
                    handler(newval,oldval){
                        console.log("新的內容:"+newval);
                        console.log("舊的內容:"+oldval);
                    }
                }
            }
        })

當我們在文本框內輸入內容時:

Vue中如何watch監聽屬性

查看輸出結果:

Vue中如何watch監聽屬性

3.布爾值

<div id="app">
        <p v-show="isShow">通過修改布爾值顯示和隱藏</p>
        <button @click="isShow = !isShow">點擊改變布爾值</button>
    </div>
 

let vm = new Vue({
            el:'#app',
            data:{
                isShow:true
            },
            watch:{
                isShow:{
                    handler(newval,oldval){
                        console.log("新的值:"+newval);
                        console.log("舊的值:"+oldval);
                    }
                }
            }
        })

當點擊按鈕切換時,查看控制臺:

Vue中如何watch監聽屬性

二.watch 監聽 復雜類型數據的變化

deep 屬性:深度監聽對象變化 (代表是否深度監聽),當需要監聽一個對象的改變時,普通的 watch 方法無法監聽到對象內部屬性的改變,此時就需要 deep 屬性對對象進行深度監聽。

1.對象

<div id="app">
        <input type="text" v-model="mes.name">
        <p>輸入的內容是:{{mes.name}}</p>
    </div>
let vm = new Vue({
            el:'#app',
            data:{
                mes:{name:''}
            },
            watch: {
                mes:{
                    // watch監聽屬性監聽對象時新舊值時相同的
                    handler(newval){
                        console.log("新值為:"+this.mes.name);
                    },
                    deep:true
                }
            }
        })

在文本框中輸入內容后,查看控制臺:

Vue中如何watch監聽屬性

也可以在對象中添加num,通過滑動桿來控制num的值,并監聽:

 <input type="range" v-model="mes.num">
 data:{
                mes:{name:'',num:''}
            },
 
watch: {
                mes:{
                    // watch監聽屬性監聽對象時新舊值時相同的
                    handler(newval){
                        console.log("num新值:"+this.mes.num);
                    },
                    deep:true
                }
            }

滑動時查看輸出結果:

Vue中如何watch監聽屬性

2.數組

<body>
    
    <div id="app">
        <ul>
            <li v-for="(item,index) in arr">{{item}}</li>
        </ul>
        <!-- 添加一個按鈕,點擊時往數組中添加一個新內容 -->
        <button @click="add()">點擊添加</button>
    </div>
 
    <script src="./js/vue.js"></script>
    <script>
        let vm = new Vue({
            el:'#app',
            data:{
                arr:[1,2,3,4,5]
            },
            methods:{
                add(){
                    // 獲取當前數組最大值
                    let cont = this.arr[this.arr.length-1];
                    // 自增
                    cont++;
                    // 向數組最后一位添加元素
                    this.arr.push(cont);
                }
            },
            watch: {
                arr:{
            // 監聽數組的時候不需要深度監聽,不需要deep
                    handler(newval){
                        console.log("新數組為:"+newval);
                    }
                }
            }
        })
    </script>
</body>

點擊添加元素后,查看輸出結果:

Vue中如何watch監聽屬性

3.對象數組

<body>
    
    <div id="app">
        <ul>
            <li v-for="item in list">
                {{item.id}}--{{item.name}}
            </li>
        </ul>
        <!-- 定義文本框,向數組中添加新的對象 -->
        <input type="text" v-model="id">
        <input type="text" v-model="name">
        <button @click="add()">添加</button>
    </div>
 
    <script src="./js/vue.js"></script>
    <script>
        let vm = new Vue({
            el:'#app',
            data:{
                list:[
                    {id:1,name:"哇哈"},
                    {id:2,name:"哇哈哈"},
                    {id:3,name:"哇哈哈哈"}
                ],
                id:"",
                name:''
            },
            methods: {
                // 將收到的輸入內容添加到數組中
                add(){
                    this.list.push({id:this.id,name:this.name});
                    // 清除文本框的內容
                    this.id=this.name=''
                }
            },
            watch:{
                // 注意:watch對象中監聽的數據,一定是數據中心data中已經存在的數據
                // watch監聽數組對象 新,舊值是相等,但是監聽數組的時候,不需要 深度監聽!
                list:{
                    handler(newval){
                        newval.forEach((item)=>{
                            console.log(item.name);
                        })                       
                    }
                }
            }
        })
    </script>
</body>

添加新元素后查看輸出結果:

Vue中如何watch監聽屬性

4.對象數組的屬性

<body>
    
    <div id="app">
        <ul>
            <li v-for="x in list">
                {{x.id}}---{{x.name}} &emsp;
                <button @click="mod(x.id)">修改</button>
            </li>
        </ul>
    </div>
 
    <script src="./js/vue.js"></script>
    <script>
        let vm = new Vue({
            el:'#app',
            data:{
                list:[
                    {id:1,name:'ww'},
                    {id:2,name:'ee'},
                    {id:3,name:'qq'}
                ],
            },
            methods: { 
                mod(id,name){
                    this.list.forEach((item)=>{
                        // 在遍歷的過程中做判斷,如果你點擊的id就是你當前編輯的這一條數據
                        if(item.id == id){
                            item.name = "老鐵"
                            console.log(item);
                        }
                    })
                }
            },
            watch: {
                list:{
                    handler(x,y){
                        x.forEach((element)=>{
                            console.log(element.name);
                        })
                    },
                    deep:true
                }
            }
        })
    </script>
</body>

點擊修改時,查看輸出結果:

Vue中如何watch監聽屬性

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Vue中如何watch監聽屬性”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长兴县| 云阳县| 平原县| 铜川市| 北票市| 北川| 平和县| 西藏| 永春县| 双柏县| 四平市| 安化县| 霍城县| 磐安县| 嘉兴市| 常德市| 贺州市| 隆子县| 三穗县| 和顺县| 海伦市| 惠安县| 延吉市| 中山市| 尉氏县| 广德县| 邹城市| 长沙市| 顺昌县| 广灵县| 鲜城| 盈江县| 郁南县| 江阴市| 张家口市| 来安县| 大石桥市| 宕昌县| 桦川县| 英吉沙县| 兖州市|