Vue学习之watch侦听器:案例实现翻译功能

3 篇文章 0 订阅
订阅专栏

watch侦听器

作用:监视数据的变化,当数据发生变化时,执行一些业务逻辑或者是异步操作

执行的场景例如在线翻译,当文本区域的内容发生变化时,会发生翻译内容的同时更新

语法:简单的写法➡简单数据类型,可以直接的进行监听

           完整的写法 ➡添加额外的配置项

案例:翻译功能

案例准备代码:

<!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>
    <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>
  </head>
  <body>
    <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>
      const app = new Vue({
        el: '#app',
        data: {
          words: ''
        },
        watch:{
          words(NewValue,OldValue){
            console.log("由"+OldValue+"变化到了"+NewValue)
          }
        }
      })
    </script>
  </body>
</html>

运行结果:

 

通过watch监听器去完善所有的代码

当文本框的内容发生了变化时,翻译框也会发生变化

注意:本篇文章使用的api翻译内容,并不是根据真实情况所翻译,只是模拟翻译的场景,翻译的内容请忽略不计。

在准备的代码进行修改:

1:带着需要被翻译的文本去发出请求,获取得到的数据(监听)
<script>
      // 需求:输入内容,修改语言,都实时翻译
      // 接口地址:https://applet-base-api-t.itheima.net/api/translate
      // 请求方式:get
      // 请求参数:
      // (1)words:需要被翻译的文本(必传)
      // (2)lang: 需要被翻译成的语言(可选)默认值-意大利
      // -----------------------------------------------
   
      const app = new Vue({
        el: '#app',
        data: {
          obj: {
            words: '小黑',
            lang: 'italy'
          },
          result: '', // 翻译结果
        },
        watch: {
          obj: {
            deep: true, 
            immediate: true,
            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>
 代码讲解

一:   

deep: true, // 深度监视,只要是obj下的所有属性都会被监视,只要属性值发生变化就会发生被执行handler中代码部分。

 immediate: true, // 立刻执行,一进入页面handler就立刻执行一次,加载默认的属性值

二: clearTimeout(this.timer)
              this.timer = setTimeout(async () => { 
防抖模式:在上面的运行结果中你会发现只要被翻译的内容发生变化事,控制台就会立马的打印,这种操作会极大的消耗我们的内春空间,延迟执行 → 干啥事先等一等,延迟一会,一段时间内没有再次触发,才执行。

2:将获取得到的数据,显示在翻译框里 
<div class="output-wrap">
  <div class="transbox">{{result}}</div>
</div>
3:在obj下面除了words还有一个属性lang,这个属性发挥的作用则是翻译的语种类型发生改变时,会执行watch监听器的内容。
<div class="query">
        <span>翻译成的语言:</span>
        <select v-model="obj.lang">
          <option value="italy">意大利</option>
          <option value="english">英语</option>
          <option value="german">德语</option>
        </select>
      </div>

完整的代码

<!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>
    <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>
  </head>
  <body>
    <div id="app">
      <!-- 条件选择框 -->
      <div class="query">
        <span>翻译成的语言:</span>
        <select v-model="obj.lang">
          <option value="italy">意大利</option>
          <option value="english">英语</option>
          <option value="german">德语</option>
        </select>
      </div>

      <!-- 翻译框 -->
      <div class="box">
        <div class="input-wrap">
          <textarea v-model="obj.words"></textarea>
          <span><i>⌨️</i>文档翻译</span>
        </div>
        <div class="output-wrap">
          <div class="transbox">{{ result }}</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: {
          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)
            }
          }

          //下面代码则是实现对obj下面的单独的一个属性进行的监听

          // 'obj.words' (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>
  </body>
</html>

运行的结果

Vue基础实战-在线翻译
回忆的夏天
07-12 683
知识点: vue-cli脚手架的基本使用 vue-resource的使用 调用翻译API 这次使用vue-cli脚手架来搭建工程项目, vue init webpack translate 创建项目后,首先先搭建一个简单的页面,我们需要两个组件,一个是表单内容的,一个是输出结果,所以我们在components下创建TranslateFom.vue和TranslateOutput....
vue侦听器Watch)精彩案例剖析二
前端基地
07-24 1225
本文全方位地阐述了 watch 的相关概念。其中,对 watch 监视普通数据类型、对象类型以及数组类型展开了详尽的精讲,并通过丰富的案例进行了深入的分析。此外,还系统地介绍了计算属性与 watch 之间存在的差异,并同样借助案例加以剖析。最后,对 $watch 案例进行了全面的介绍。
vue侦听器watch精彩案例分享
最新发布
08-07
本资源方位地分享了watch 的经典案例。其中,对 watch 监视普通数据类型、对象类型以及数组类型通过丰富的案例进行了深入的分析。此外,还对比了计算属性与 watch 之间存在的差异,并同样借助案例加以剖析。最后,对 $watch 案例进行了全面的编写。
vue中的watch
qq_43654065的博客
03-09 585
watch翻译为观察,在vue中它是一个侦听器,会对依赖属性进行侦听(观察)。当侦听的属性发生变化时,就会执行一个函数。值得注意的是,watch是异步函数,如果我们的属性需要在侦听后再执行某个变化,可以使用$nextTick这个API。 基本用法 let vm = new Vue({ data: { a: 1, b: { c: 2 }, d: { e: {
vuewatch实现翻译案例
m0_53951384的博客
10-31 310
翻译案例需要向在线接口发起一个Ajax请求,所以需要引入axios库。当输入一个单词或者文字时自动发起翻译请求。所以可以使用watch监听器来监听属性是否变更,当发生变化即发起翻译请求。翻译接口提供:该接口会返回随机字符串作为翻译结果。
vue学习vue侦听器,应用场景+注意点+真实案例
花椒和蕊的博客
12-24 1481
侦听器:允许开发者监视数据的变化,从而针对数据的变化做特定的操作 侦听器本质上是一个函数,要监听哪个数据的变化,就把数据名作为方法名即可 const vm = new Vue({ el:'#app', data:{ username;'' }, watch:{ //监听data中定义的username值的变化 //newVal是变化后的新值,oldVal是变化之前的旧值 username(newVal,oldVal){ console.log(newVal,oldVal) } } }) 应用场景:侦听–
【解决方案】在Vue、HTML项目中使用@spacechart/translate 插件实现在线实时翻译、自定义翻译
朝拜者
02-02 1526
Vue、HTML项目中使用@spacechart/translate 插件实现在线实时翻译、自定义翻译
Vue.js中关于侦听器watch)的高级用法示例
10-18
Vue.js中的侦听器watch)是一个强大的特性,它允许开发者在数据变化时执行自定义逻辑,特别是处理异步操作或者复杂的数据依赖。在本文中,我们将深入探讨Vue.jswatch的高级用法,以及如何有效地利用它们来优化你...
Vue选项之watch侦听器
庚中
03-26 954
侦听器:在数据变化的监控经常使用. 一.看一个监控变化的案例 我们可以先看一个简单的数据变化监控的例子,例如天气预报的穿衣指数,它主要是根据温度来进行提示的,温度大于26度时,我们建议穿T恤短袖,温度小于26度大于0度时,我们建议穿夹克长裙,温度小于0度时我们建议穿棉衣羽绒服,下面来看一下实现代码: <body> <div id="app"> <...
Vue侦听器Watch的实战案例解析
资源摘要信息:"vue侦听器watch精彩案例分享" Vue.js是近年来非常流行的一个前端JavaScript框架,它通过数据驱动和组件化的概念简化了复杂的界面开发。在Vue中,侦听器watch)是一个非常重要的功能,它允许开发者...
vue实现在线翻译功能
10-16
主要为大家详细介绍了vue实现在线翻译功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
vue2.0 实现翻译的小案例
11-24
这是个vue2.0 实现翻译的小案例 下载在自己电脑 直接npm run dev即可
VUE实现在线翻译11111
08-03
VUE-cli 2.0实现简单的在线翻译 主要就是熟悉VUE框架的使用
vue translate peoject实现在线翻译功能【新手必看】
08-27
主要介绍了vue translate peoject实现在线翻译功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
vue模拟实时翻译,并添加防抖
Hello_MyDream的博客
04-26 156
【代码】vue模拟实时翻译,并添加防抖。
vue实战之在线翻译项目
qq_35788269的博客
06-11 2099
vue实战之在线翻译项目今天,博主带来的分享是vue实战之在线翻译项目,一个小小的vue项目,用到了vue的很多基础语法,传组件等等!我们先来看下效果把!左侧输入一种语言,右侧选择要转换的语言,点击翻译就可以得到结果!是不是很神奇!当然博主这里仅仅罗列的七八种语言!我们就以汉语来展示了!其他语言的展示:可以输入与可以翻译的语言有: &lt;option value="en"&gt;英语&lt;/o...
Vue-在线翻译工具
caott666的博客
08-13 1541
一、核心目录结构 涉及的内容 V型,V系列 组件通信:$放出,道具 翻译服务的API:第三方翻译服务商,申请可以免费的金钥https://translate.yandex.com/developers/keys App.vue &lt;template&gt; &lt;div id="app" &gt; &lt;h1&gt;在线翻译&lt;/h1&gt; &lt...
教你怎么算MD5!
YooHoeh的博客
08-29 1837
MD5计算 JavaScript版 let MD5 = (sMessage) => { function RotateLeft(lValue, iShiftBits) { return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits)); } ...
写文章

热门文章

  • 华为ensp.访问控制列表(ACL):关于基本ACL和高级ACL————访问的代码基础讲解(允许或禁止访问) 18846
  • 动态网页(JSP 文件)如何连接数据库(SQL Server)--看这里 10724
  • Springboot基础学习之(二十一):Swagger基础学习(swagger信息介绍,配置扫描接口和开关,分组和接口注释) 3738
  • spring boot基础学习之(八)在前端网页中获取后端信息并显示出来 3517
  • 动态网页(JSP)通过调用JavaBean类来对数据库进行添加,更改,删除等操作(新手动态的综合练习) 3496

分类专栏

  • Vue 3篇
  • Java面试 4篇
  • JAVA 10篇
  • wechat stable 1篇
  • redis 12篇
  • spring boot 23篇
  • 小白学基础 53篇
  • JSP 2篇
  • C语言 2篇
  • JavaScript 4篇
  • SpringMVC 10篇
  • Spring 15篇
  • pr视频剪辑 1篇
  • 笔记 4篇
  • ENSP 3篇
  • Photoshop 1篇
  • 软件定义网络 1篇
  • windows server 1篇
  • java-API 2篇

最新评论

  • spring boot基础学习之(八)在前端网页中获取后端信息并显示出来

    m0_51362533: 请问解析不了${}是为什么

  • redis之benchmark工具:benchmark是redis自带的性能测试工具

    yszdzjt: 什么意思 能否具体解释一下

  • redis之benchmark工具:benchmark是redis自带的性能测试工具

    yszdzjt: 什么意思 能否具体解释一下

  • redis之benchmark工具:benchmark是redis自带的性能测试工具

    yszdzjt: 什么意思 能否具体解释一下

  • redis之benchmark工具:benchmark是redis自带的性能测试工具

    不想睡醒的梦: 分发完成具有一定的延时问题

大家在看

  • 无线移动通信的关键技术:SOA,WebX.0,Widget/Mashup,P2P/P4P,SaaS/云计算等架构和MIP,SIP,RTSP (实时流协议)等,定义和特点 401
  • 9.2.2 动态内存分布 316
  • 二开苹果cms视频网站源码模板_可封装双端app 620
  • Python文件操作(读取、写入、修改和删除)
  • “The Danger of Seawater Intrusion” 165

最新文章

  • 云原生:一张图了解devops 中CI/CD
  • Java——关于实现多线程的测试小题,帮助我们更好的理解多线程的使用方法
  • Vue基础必备掌握知识点-Vue的指令系统讲解(二)
2024年1篇
2023年52篇
2022年26篇
2021年12篇
2020年10篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想睡醒的梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家美陈玻璃钢动物雕塑报价表宝应玻璃钢造型雕塑辽宁玻璃钢卡通雕塑小鸟价格佛山盐城玻璃钢雕塑供货商绵阳玻璃钢雕塑公司玻璃钢三箫雕塑威海玻璃钢人物雕塑价格商场店铺美陈布置评分表青岛商场美陈厂家供应河源仿铜西式玻璃钢雕塑揭阳 玻璃钢雕塑玻璃钢人像雕塑哪家值得信赖玻璃钢动物雕塑特色咸阳商场美陈装饰公司玻璃钢雕塑公司排名商场天井灯饰美陈丽水抽象玻璃钢雕塑销售电话韶关玻璃钢动物雕塑代理商玻璃钢龙柱雕塑山西户外装饰玻璃钢美陈雕塑德州玻璃钢美陈雕塑椅泸州玻璃钢仿铜雕塑定制河北校园雕塑玻璃钢马鞍山动物玻璃钢雕塑多少钱太康制作玻璃钢雕塑厂价格订做玻璃钢雕塑浮雕玻璃钢切面犀牛雕塑制作玻璃钢雕塑的原料及配比山东仿铜孔子玻璃钢雕塑厂家太湖玻璃钢卡通人物雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化