天天看點

【Vue】監聽器watch總結

Vue監聽器watch的6種使用方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue監聽器watch總結</title>
    <script crossorigin="anonymous" integrity="sha384-+jvb+jCJ37FkNjPyYLI3KJzQeD8pPFXUra3B/QJFqQ3txYrUPIP1eOfxK4h3cKZP" src="https://lib.baomitu.com/vue/2.6.11/vue.js"></script>
</head>
<body>
    <div id="test1">
        <h3>用法1:常見用法</h3>
        <input v-model="message">
        <span>{{showMessage}}</span>
    </div>
    <div id="test2">
        <h3>用法2:綁定方法</h3>
        <input v-model="message">
        <span>{{showMessage}}</span>
    </div>
    <div id="test3">
        <h3>用法3:deep + handler</h3>
        <input v-model="deepMessage.a.b">
        <span>{{showMessage}}</span>
    </div>
    <div id="test4">
        <h3>用法4:監聽對象屬性</h3>
        <input v-model="deepMessage.a.b">
        <span>{{showMessage}}</span>
    </div>
    <div id="test5">
        <h3>用法5:immediate</h3>
        <input v-model="message">
        <span>{{showMessage}}</span>
    </div>
    <div id="test6">
        <h3>用法6:綁定多個handler</h3>
        <input v-model="message">
        <span>{{showMessage}}</span>
    </div>
    <script>
        new Vue({
            el: '#test1',
            watch: {
                message(value) {
                    this.showMessage = value
                }
            },
            data() {
                return {
                    message: 'Hello world',
                    showMessage: ''
                }
            }
        })
        new Vue({
            el: '#test2',
            watch: {
                message: 'handleMessage'
            },
            data() {
                return {
                    message: 'Hello world',
                    showMessage: ''
                }
            },
            methods: {
                handleMessage(value) {
                    this.showMessage = value
                }
            }
        })
        new Vue({
            el: '#test3',
            watch: {
                deepMessage: {
                    handler: 'handleDeepMessage',
                    deep: true
                }
            },
            data() {
                return {
                    deepMessage: {
                        a: {
                            b: 'Deep Message'
                        }
                    },
                    showMessage: ''
                }
            },
            methods: {
                handleDeepMessage(value) {
                    this.showMessage = value.a.b
                }
            }
        })
        new Vue({
            el: '#test5',
            watch: {
                message: {
                    handler: 'handleMessage',
                    immediate: true
                }
            },
            data() {
                return {
                    message: 'Hello world',
                    showMessage: ''
                }
            },
            methods: {
                handleMessage(value) {
                    this.showMessage = value
                }
            }
        })
        new Vue({
            el: '#test6',
            watch: {
                message: [{
                    handler: 'handleMessage1'
                },
                'handleMessage2',
                function(value) {
                    this.showMessage = this.showMessage + '@@@'
                }]
            },
            data() {
                return {
                    message: 'Hello world',
                    showMessage: ''
                }
            },
            methods: {
                handleMessage1(value) {
                    this.showMessage = value
                },
                handleMessage2(value) {
                    this.showMessage = this.showMessage + '###'
                }
            }
        })
        new Vue({
            el: '#test4',
            watch: {
                'deepMessage.a.b': 'handleMessage'
            },
            data() {
                return {
                    deepMessage: {
                        a: {
                            b: 'Hello world'
                        }
                    },
                    showMessage: ''
                }
            },
            methods: {
                handleMessage(value) {
                    this.showMessage = value
                }
            }
        })
    </script>
</body>
</html>
           

繼續閱讀