Vue2向Vue3过度核心技术watch侦听器 以你之姓@ 2024-03-24 21:33 49阅读 0赞 #### 目录 #### * * 1 watch侦听器 * * 1.1 作用: * 1.2 语法: * 1.3 侦听器代码准备 * 2 翻译案例-代码实现 * 3 watch侦听器 * * 3.1 语法 * 3.2 需求 * 3.3 代码实现 * 3.4 总结 -------------------- ### 1 watch侦听器 ### ![在这里插入图片描述][574b258b935e44dbb3baee41f04e8520.png] #### 1.1 作用: #### **监视数据变化**,执行一些业务逻辑或异步操作 #### 1.2 语法: #### 1. watch同样声明在跟data同级的配置项中 2. 简单写法: 简单类型数据直接监视 3. 完整写法:添加额外配置项 data: { words: '苹果', obj: { words: '苹果' } }, watch: { // 该方法会在数据变化时,触发执行 数据属性名 (newValue, oldValue) { 一些业务逻辑 或 异步操作。 }, '对象.属性名' (newValue, oldValue) { 一些业务逻辑 或 异步操作。 } } #### 1.3 侦听器代码准备 #### <style> * { margin: 0; padding: 0; box-sizing: border-box; font-size: 18px; } #app { padding: 10px 20px; } .query { margin: 10px 0; } .box { display: flex; } textarea { width: 300px; height: 160px; font-size: 18px; border: 1px solid #dedede; outline: none; resize: none; padding: 10px; } textarea:hover { border: 1px solid #1589f5; } .transbox { width: 300px; height: 160px; background-color: #f0f0f0; padding: 10px; border: none; } .tip-box { width: 300px; height: 25px; line-height: 25px; display: flex; } .tip-box span { flex: 1; text-align: center; } .query span { font-size: 18px; } .input-wrap { position: relative; } .input-wrap span { position: absolute; right: 15px; bottom: 15px; font-size: 12px; } .input-wrap i { font-size: 20px; font-style: normal; } </style> <div id="app"> <!-- 条件选择框 --> <div class="query"> <span>翻译成的语言:</span> <select> <option value="italy">意大利</option> <option value="english">英语</option> <option value="german">德语</option> </select> </div> <!-- 翻译框 --> <div class="box"> <div class="input-wrap"> <textarea v-model="words"></textarea> <span><i>⌨️</i>文档翻译</span> </div> <div class="output-wrap"> <div class="transbox">mela</div> </div> </div> </div> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> <script> // 接口地址:https://applet-base-api-t.itheima.net/api/translate // 请求方式:get // 请求参数: // (1)words:需要被翻译的文本(必传) // (2)lang: 需要被翻译成的语言(可选)默认值-意大利 // ----------------------------------------------- const app = new Vue({ el: '#app', data: { words: '' }, // 具体讲解:(1) watch语法 (2) 具体业务实现 }) </script> ### 2 翻译案例-代码实现 ### <script> // 接口地址:https://applet-base-api-t.itheima.net/api/translate // 请求方式:get // 请求参数: // (1)words:需要被翻译的文本(必传) // (2)lang: 需要被翻译成的语言(可选)默认值-意大利 // ----------------------------------------------- const app = new Vue({ el: '#app', data: { //words: '' obj: { words: '' }, result: '', // 翻译结果 // timer: null // 延时器id }, // 具体讲解:(1) watch语法 (2) 具体业务实现 watch: { // 该方法会在数据变化时调用执行 // newValue新值, oldValue老值(一般不用) // words (newValue) { // console.log('变化了', newValue) // } 'obj.words' (newValue) { // console.log('变化了', newValue) // 防抖: 延迟执行 → 干啥事先等一等,延迟一会,一段时间内没有再次触发,才执行 clearTimeout(this.timer) this.timer = setTimeout(async () => { const res = await axios({ url: 'https://applet-base-api-t.itheima.net/api/translate', params: { words: newValue } }) this.result = res.data.data console.log(res.data.data) }, 300) } } }) </script> ### 3 watch侦听器 ### #### 3.1 语法 #### 完整写法 —>添加额外的配置项 1. deep:true 对复杂类型进行深度监听 2. immdiate:true 初始化 立刻执行一次 data: { obj: { words: '苹果', lang: 'italy' }, }, watch: { // watch 完整写法 对象: { deep: true, // 深度监视 immdiate:true,//立即执行handler函数 handler (newValue) { console.log(newValue) } } } #### 3.2 需求 #### ![在这里插入图片描述][a43ad47c6eb7473584ce830678725aa3.png] * 当文本框输入的时候 右侧翻译内容要时时变化 * 当下拉框中的语言发生变化的时候 右侧翻译的内容依然要时时变化 * 如果文本框中有默认值的话要立即翻译 #### 3.3 代码实现 #### <script> const app = new Vue({ el: '#app', data: { obj: { words: '小黑', lang: 'italy' }, result: '', // 翻译结果 }, watch: { obj: { deep: true, // 深度监视 immediate: true, // 立刻执行,一进入页面handler就立刻执行一次 handler (newValue) { clearTimeout(this.timer) this.timer = setTimeout(async () => { const res = await axios({ url: 'https://applet-base-api-t.itheima.net/api/translate', params: newValue }) this.result = res.data.data console.log(res.data.data) }, 300) } } } }) </script> #### 3.4 总结 #### watch侦听器的写法有几种? 1.简单写法 watch: { 数据属性名 (newValue, oldValue) { 一些业务逻辑 或 异步操作。 }, '对象.属性名' (newValue, oldValue) { 一些业务逻辑 或 异步操作。 } } 2.完整写法 watch: { // watch 完整写法 数据属性名: { deep: true, // 深度监视(针对复杂类型) immediate: true, // 是否立刻执行一次handler handler (newValue) { console.log(newValue) } } } [574b258b935e44dbb3baee41f04e8520.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/13/2304dcfaf8ce441e84885558902c9be4.png [a43ad47c6eb7473584ce830678725aa3.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/13/f73b663b220c43f5b2f0333c43e10ac0.png
相关 Vue2向Vue3过度Vue3组合式API 目录 1. Vue2 选项式 API vs Vue3 组合式API 2. Vue3的优势 3 使用create-vue搭建Vue3项目 1. ﹏ヽ暗。殇╰゛Y/ 2024年03月24日 21:58/ 0 赞/ 3 阅读
相关 Vue2向Vue3过度Vuex核心概念module模块 目录 1 核心概念 - module 1.目标 2.问题 3.模块定义 - 准备 state 深碍√TFBOYSˉ_/ 2024年03月24日 21:51/ 0 赞/ 69 阅读
相关 Vue2向Vue3过度Vuex核心概念state状态 目录 1 核心概念 - state 状态 1.目标 2.提供数据 3.访问Vuex中的数据 阳光穿透心脏的1/2处/ 2024年03月24日 21:51/ 0 赞/ 78 阅读
相关 Vue2向Vue3过度核心技术工程化开发和脚手架 目录 1 工程化开发和脚手架 1.1 开发Vue的两种方式 1.2.脚手架Vue CLI 2 项目目录 灰太狼/ 2024年03月24日 21:36/ 0 赞/ 43 阅读
相关 Vue2向Vue3过度核心技术生命周期 目录 1 Vue生命周期 2 Vue生命周期钩子 3 生命周期钩子小案例 1.1 在created中发送数据 小灰灰/ 2024年03月24日 21:35/ 0 赞/ 71 阅读
相关 Vue2向Vue3过度核心技术watch侦听器 目录 1 watch侦听器 1.1 作用: 1.2 语法: 1.3 侦听器代码准备 以你之姓@/ 2024年03月24日 21:33/ 0 赞/ 50 阅读
还没有评论,来说两句吧...