Vue实例的watch属性

一、说明
watch属性,可以监听data中指定数据的变化,然后可以触发这个watch对象中对应的处理函数。
监听的数据名作为watch对象的属性名,指向对应的处理函数。
处理函数参数:

  • 参数一,newVal,新数据。
  • 参数二,oldVal,旧数据。

二、watch实现keyup事件
监听输入框的变化进行数据拼接。

<html>

<head>
    <meta charset="utf-8">
    <title></title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/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(newVal,oldVal){
                    console.log('监视到了firstName的变化');
                    this.fullName = newVal+"-"+this.lastName;
                },
                lastName(newVal,oldVal){
                    this.fullName = newVal+"-"+this.firstName;
                }
            }
        });
    </script>
</body>

</html>

虽然说上面用keyup事件监听触发methods函数处理使输入框变化也可以实现。
watch有些优势是keyup实现不了的,这里监视的是文本框的数据,但如果是要监视看不见摸不着的、虚拟的,无法使用keyup,例如路由。

三、watch监听路由地址的改变
想要监听路由的改变,即<router-view></router-view>的改变,但它身上没有什么事件,则只能使用watch监听路由地址的改变。

<html>

<head>
    <meta charset="utf-8">
    <title></title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/vue-router/dist/vue-router.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: {

            },
            watch: {
                '$route.path'(newVal, oldVal) {
                    if (newVal == '/login') {
                        console.log('欢迎进入登陆页面');
                    } else if (newVal == '/register') {
                        console.log('欢迎进入注册页面');
                    }
                }
            },
            router,
        });
    </script>
</body>

</html>
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一:什么是闭包?闭包的用处? (1)闭包就是能够读取其他函数内部变量的函数。在本质上,闭包就 是将函数内部和函数外...
    xuguibin阅读 10,076评论 1 52
  • vue 2.0 渐进式框架 MVC 单向通信 > m:model 数据层 保存数据 > v:view视图层 用户界...
    web前端ling阅读 892评论 0 0
  • vue.js 谁在影响着页面?model中的data Vue.js 官网 api学习步骤引文件写结构初始化js 简...
    Ht_何甜阅读 594评论 0 0
  • Address:https://www.zybuluo.com/XiangZhou/note/208532 Exp...
    天蠍蒗漫阅读 11,673评论 2 55
  • 什么是Vue Vue.js 是一套构建用户界面的框架 只关注视图层 易于上手,还便于与第三方库或即有项目整合 M...
    ef44694b25cb阅读 952评论 0 0

友情链接更多精彩内容