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

一 叶 知 秋,奥 妙 玄 心

相关推荐
_山海21 分钟前
Bun入门指南
前端·javascript·后端
想睡懒觉27 分钟前
我用 CSS 3D 做了个星空隧道 Loading,没有 Three.js
前端
labixiong31 分钟前
transition 写在 CSS 变量上为什么不生效?给变量补张「类型身份证」
前端·css·html
YHL39 分钟前
🧠 Agent 记忆进阶:总结压缩与向量检索 —— 从截断到 Milvus 长期记忆
前端·人工智能
2301_322414280439 分钟前
活力孕康复APP 47737- 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·mysql·微信小程序·idea·微信开发者工具
YHL40 分钟前
🎯 JavaScript 单例模式(Singleton Pattern)—— 从理论到实战
javascript·设计模式
用户921080262861 小时前
前端 Vue 专栏 05:从 Object.defineProperty 到 Proxy,彻底理解 Vue 响应式原理
前端
Fluxart.ai1 小时前
GPT Image 2.5 有使用次数限制吗?额度、并发、频率限制说明
服务器·前端·gpt
程序员海军1 小时前
AI 越来越强,为什么打工人反而越来越累、越来越内耗了?
前端·程序员·aigc