vue watch

 

一、watch 監聽器,用以監聽某個數據,當有改動時,觸發相對應的處理。

<html>

<head>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>

    <div id="app">
        <input type="text" v-model="message">
        <p v-if="!verificationResult">只能輸入數目</p>
    </div>

    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                message: '',
                verificationResult: true
            },
            watch: {
                message: function (newValue, oldValue) {
                    console.log("newValue:", newValue, " oldValue:", oldValue);
                    this.verificationResult = /^[\d]*$/.test(newValue);
                }
            }
        });
    </script>

</body>

</html>

說明:

此 watch 監聽器去監聽 message 屬性之變化。

 

二、監聽 data 中的 Object 底下的值

<html>

<head>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>

    <div id="app">
        <input type="text" v-model="product.id">
        <p v-if="!verificationResult">只能輸入數目</p>
    </div>

    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                product: {
                    id: "",
                    name: ""
                },
                verificationResult: true
            },
            watch: {
                "product.id": function (newValue) {
                    this.verificationResult = /^[\d]*$/.test(newValue);
                }
            }
        });
    </script>

</body>

</html>

說明:

當想要監聽 data 中的 Object 底下的值時,需要用雙引號將其包裹起來。

 

三、options

<html>

<head>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>

    <div id="app">
        <input type="text" v-model="message">
        <p v-if="!verificationResult">只能輸入數目</p>
    </div>

    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                message: '',
                verificationResult: true
            },
            watch: {
                message: {
                    handler: function (newValue, oldValue) {
                        console.log("newValue:", newValue, " oldValue:", oldValue);
                        this.verificationResult = /^[\d]*$/.test(newValue);
                    },
                    deep: true,
                    immediate: true
                }
            }
        });
    </script>

</body>

</html>

說明:

監聽一屬性可以用另一種「物件表示法」來寫,其中包含三種屬性如下:

1、handler

放入我們需要處理的方法。

2、deep

當欲觀察值的特性為 call by reference,例如 Object 時,需將 deep 值設定為 true,

告知 watch 需要深度觀察。否則會因為特性關係,無法觸發監聽器。

3、immediate

監聽器預設為當值有所變化時才會觸發。如果我們希望在初始化完成後,

就先觸發,執行 handler,就可以將 immediate 值設為 true。