前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vue监听器

Vue监听器

作者头像
别团等shy哥发育
发布2023-02-25 16:02:21
7340
发布2023-02-25 16:02:21
举报
文章被收录于专栏:全栈开发那些事

Vue监听器

1、监听器简介

  Vue中的监听器主要用于监测组件实例的数据变动,并依据该数据变动作出响应,如更新一个数据,或者发起异步请求从服务器端请求数据。与计算属性不同的是,监听器不需要返回新的数据,不能被当作数据属性使用,当需要在数据变化时执行异步或开销较大的操作时,使用监听器是最合适的。

2、使用监听器

  监听器在Vue实例的选项对象的watch选项中定义。

代码语言:javascript
复制
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>监听器</title>
	</head>
	<body>
		<div id = "app">
		   千米 : <input type = "text" v-model="kilometers">
		   米 : <input type = "text" v-model="meters">
		</div>
		<p id="info"></p>
	
		<script src="https://unpkg.com/vue@next"></script>
		<script>
			const vm = Vue.createApp({
    		    data() {
    		        return {
    		            kilometers: 0,
    		            meters: 0
    		        }
    		    },
    		    watch: {
    	            kilometers(val) {
    	                this.meters = val * 1000;
    	                console.log("aaa");
    	            },
	                // 监听器函数也可以接受两个参数,val是当前值,oldVal是改变之前的值
    	            meters(val, oldVal) {
    	                this.kilometers = val / 1000;
    	            }
		        }
		    }).mount('#app');
		</script>
	</body>
</html>

  我们编写了两个监听器,分别监听数据属性kilometers和meters的变化,当其中一个数据属性的值发生改变时,对应的监听器就会被调用,经过计算得到另一个数据属性的值。 渲染结果如下,在“千米”或“米”输入框中输入数据,可以看到另一个输入框中的数据也会跟着改变。

3、监听器的更多形式

监听器在定义时,除了直接写一个函数外,还可以接一个方法名。

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        年龄:<input type="text" v-model="age">
        <p v-if="info">{{info}}</p>
    </div>


    <script src="https://unpkg.com/vue@next"></script>
    <script>
        const vm=Vue.createApp({
            data(){
                return{
                    age:0,
                    info:''
                }
            },
            methods:{
                checkAge(){
                    if(this.age>=18){
                        this.info='已成年';
                    }else{
                        this.info='未成年';
                    }
                }
            },
            watch:{
                age:'checkAge'
            }
        }).mount('#app');
    </script>
</body>
</html>

渲染结果:

监听器还可以监听一个对象的属性变化,代码如下所示:

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        年龄:<input type="text" v-model="person.age">
        <p v-if="info">{{info}}</p>
    </div>


    <script src="https://unpkg.com/vue@next"></script>
    <script>
        const vm=Vue.createApp({
            data(){
                return{ 
                    person:{
                        name:'lisi',
                        age:0
                    },
                    info:''
                }
            },
            watch:{
               //该回调会在person对象的属性改变时被调用,无论该属性被嵌套多深
               person:{
                   handler(val,oldVal){
                       if(val.age>=18){
                           this.info='已成年';
                       }else{
                           this.info='未成年';
                       }
                   },
                   deep:true,
               }
            }
        }).mount('#app');
    </script>
</body>
</html>

  要注意在监听对象属性时,使用了两个新的选项:handlerdeep,前者用于定义当数据变化时调用的监听器函数,后者主要在监听对象属性变化时使用,如果该选项的值为true,表示无论该对象的属性在对象中的层级有多深,只要该属性的值发生变化,都会被监测到。   监听器函数在初始渲染时并不会被调用,只有在后续监听器的属性发生变化时才会被调用;如果要让监听去函数在监听开始后立即执行,可以使用immendiate选项,将其值设置为true.例如:

代码语言:javascript
复制
watch:{
               //该回调会在person对象的属性改变时被调用,无论该属性被嵌套多深
               person:{
                   handler(val,oldVal){
                       if(val.age>=18){
                           this.info='已成年';
                       }else{
                           this.info='未成年';
                       }
                   },
                   deep:true,
                   immediate:true   //让监听器函数在监听开始后立即执行
               }
            }

当页面加载后,就会立即显示”未成年“。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Vue监听器
  • 1、监听器简介
  • 2、使用监听器
  • 3、监听器的更多形式
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档