【Vue】2-6、侦听器

watch 侦听器

watch 侦听器允许开发者监听数据的变化,从而针对数据的变化做特定的操作。

语法格式如下:

javascript 复制代码
const vm = new Vuew({
	el: '#app',
	data: { username: ''},
	watch: {
		username(newVal,oldVal){
			console.log(newVal,oldVal);
		}
	}
})
html 复制代码
<body>
    <div id="app">
        <input type="text" v-model="username">
    </div>
    <!-- 导入 Vue 的库文件 -->
    <script src="./lib/vue.js"></script>
    <!-- Jquery -->
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <!-- 创建 Vue 的实例对象 -->
    <script>
        /**
        const vm = new Vue({
            // el 固定写法,表示当前 vm 实例要控制页面上的哪个区域,接收的值是一个选择器
            el: '#app',
            // data 对象就是要渲染到页面上的数据
            data:{
                username: ''
            },
            watch: {
                username(newVal){
                    if(newVal != ''){
                        $.get('https://www.escook.cn/api/finduser/' + newVal,function(res){
                            console.log(res)
                        })
                    }
                }
            }
        })
        
       const vm = new Vue({
            // el 固定写法,表示当前 vm 实例要控制页面上的哪个区域,接收的值是一个选择器
            el: '#app',
            // data 对象就是要渲染到页面上的数据
            data:{
                username: 'Jack'
            },
            watch: {
                username: {
                    // 侦听器的处理函数
                    handler(newVal){ 
                        if(newVal != ''){
                            $.get('https://www.escook.cn/api/finduser/' + newVal,function(res){
                                console.log(res)
                            })
                        }
                    },
                    immediate: true
                }
            }
        })
        */
       const vm = new Vue({
            // el 固定写法,表示当前 vm 实例要控制页面上的哪个区域,接收的值是一个选择器
            el: '#app',
            // data 对象就是要渲染到页面上的数据
            data:{
                info:{
                    username: 'Jack'
                }
            },
            watch: {
                /**
                info:{
                    handler(newVal){
                        console.log(newVal);
                    },
                    deep: true
                }
                */
                // 侦听对象属性的变化
                'info.username'(newVal){
                    console.log(newVal)
                }
            }
        })
    </script>
</body>

注意:

以上形式是把侦听器定义为一个函数,所以在页面刚进来的时候是不会调用的,只有在侦听器侦听的对象数据发生变化了才会调用侦听器,并执行相应操作。

而且通过此方法定义的侦听器无法侦听对象的属性的变化。

通过 immediate 选项让页面刚加载时便调用侦听器。

通过 deep 选项让侦听器深度侦听对象中每个属性的变化。

一 叶 知 秋,奥 妙 玄 心

相关推荐
东风破_6 小时前
Docker 基础:为什么需要容器?
前端·后端·nginx
东风破_6 小时前
Docker 实战:使用 Nginx 作为容器入口代理 Node 服务
前端·后端·nginx
你别说话了7 小时前
Vue项目解决跨域
前端·javascript·vue.js
指尖时光.7 小时前
Three.js 超全入门综合案例
开发语言·javascript·ecmascript
唐青枫8 小时前
http-server:别再双击 index.html,一条命令把目录变成网站
前端·javascript
网安蟹佬霸8 小时前
OSINT开源情报收集实战:从信息搜集到资产测绘(2026最新万字保姆级指南)
前端·网络·安全·web安全·网络安全·开源
a1117768 小时前
3D历史建筑展览馆 THreeJS 开源
前端·开源
单线程_019 小时前
【源码阅读】Vue3 Tokenizer 词法分析器完整状态机流转深度梳理(3.4+ 新版架构)
前端
PBitW9 小时前
PM 丢来 3 个 Excel、12 个功能、4 种情形?用 TRAE Work 30 分钟整理成前端开发文档
前端·trae
学习星球10 小时前
Solid.js 实战:拆解官方 RealWorld 项目
开发语言·javascript·vue.js