Vue中的watch属性

2019-08-16  本文已影响0人  最爱喝龙井

vm实例中的watch属性,是用来监视数据的改变的,他是个对象,里面定义函数,函数名就是数据名,这个函数接收两个参数newValoldVal,一个代表新数据,一个代表旧数据,当数据发生改变的时候,就会触发这个函数。

例:

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="js/vue.js"></script>
</head>

<body>
    <div id="app">
        <input type="text" v-model='firstName'>+
        <input type="text" v-model= 'lastName'>=
        <input type="text" v-model='fullName'>
    </div>

    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                firstName:'',
                lastName:'',
                fullName:''
            },
            methods: {},
            watch: {
                firstName:function(newVal, oldVal) {
                    this.fullName = newVal + this.lastName;
                },
                lastName: function(newVal, oldVal) {
                    this.fullName = this.firstName + newVal;
                }
            }
        });
    </script>
</body>

</html>

watch的牛逼之处,在于他可以监视一些非Dom元素,比如路由,看下面的例子:

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="js/vue.js"></script>
    <script src="js/vue-router-3.0.1.js"></script>
</head>

<body>
    <div id="app">
        <router-link to="/login">登陆</router-link>
        <router-link to="/register">注册</router-link>
        <router-view></router-view>
    </div>

    <script>
        var login = {
            template: '<h1>这是登陆页面</h1>'
        }
        var register = {
            template: '<h1>这是注册页面</h1>'
        }
        var router = new VueRouter({
            routes:[
                {path: '/', redirect: '/login'},
                {path: '/login', component: login},
                {path: '/register', component: register}
            ]
        })
        var vm = new Vue({
            el: '#app',
            data: {},
            methods: {},
            router,
            watch: {
                '$route.path': function(newVal, oldVal) {
                    if(newVal == '/login') {
                        console.log('欢迎进入登陆界面')
                    }else if(newVal == '/register') {
                        console.log('欢迎进入注册页面')
                    }
                }
            }
        });
    </script>
</body>

</html>
上一篇 下一篇

猜你喜欢

热点阅读