【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 选项让侦听器深度侦听对象中每个属性的变化。

一 叶 知 秋,奥 妙 玄 心

相关推荐
布局呆星3 分钟前
Vue3 | 组件通信学习小结
前端·vue.js
C澒6 分钟前
IntelliPro 企业级产研协作平台:前端智能生产模块设计与落地
前端·ai编程
OpenTiny社区1 小时前
重磅预告|OpenTiny 亮相 QCon 北京,共话生成式 UI 最新技术思考
前端·开源·ai编程
前端老实人灬1 小时前
web前端面试题
前端
Moment2 小时前
AI 全栈指南:NestJs 中的 Service Provider 和 Module
前端·后端·面试
IT_陈寒2 小时前
为什么我的JavaScript异步回调总是乱序执行?
前端·人工智能·后端
Moment2 小时前
AI全栈入门指南:NestJs 中的 DTO 和数据校验
前端·后端·面试
小码哥_常2 小时前
告别RecyclerView卡顿!8个优化技巧让列表丝滑如德芙
前端
小村儿2 小时前
Harness Engineering:为什么你用 AI 越用越累?
前端·后端·ai编程
enoughisenough2 小时前
浏览器判断控制台是否开启
前端