Eric小屋

  • watch 侦听器(监视器)
  • 完整写法
  • 首页
  • 学习笔记
    • JAVA
    • Spring
    • Node.js
    • Vue
  • 学习文档
  • 案例项目
  • 课程笔记
  • 问题解决
登录

watch 侦听器(监视器)

  • Eric
  • 2023-12-22
  • 0

watch 侦听器(监视器)

作用: 监视数据变化,执行一些 业务逻辑 或 异步操作

语法:

1、简单写法: 简单类型数据,直接监视

data:{
    word:'苹果',
    obj:{
        word:'苹果'
    }
},

2、完整写法:添加额外配置

watch:{
    //该方法会在数据变化时,触发执行
    数据属性名(newValue,oldValue){
        一些业务逻辑,异步操作。
    },
    '对象.属性名'(newValue,oldValue){
        一些业务逻辑 或 异步操作
    }
}

完整写法

deep:true对复杂类型深度监视
immediate:true初始化立刻执行一次handler方法

​

watch: {// watch 完整写法
    数据属性名: {
        deep: true, // 深度监视
        immediate: true, // 是否立刻执行一次handler
        handler (newValue) {
            console.log(newValue)
        }
    }
}

例:翻译器 实时监控输入框变化 语言变化

  <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="./vue.js"></script>
  <script src="./axios.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: '',
      },
      // 具体讲解:(1) watch语法 (2) 具体业务实现
      watch: {
        obj: {
          deep: true,
          immediate: true,
          handler(newVal) {
            clearTimeout(this.timer)
            this.timer = setTimeout(async () => {
              const res = await axios({
                url: 'https://applet-base-api-t.itheima.net/api/translate',
                params: newVal
              })
              this.result = res.data.data
            }, 300)
          }
        }
      }
    })
  </script>
联系作者:2572976830@qq.com
© 2025 Eric小屋
Theme by Wing
京ICP备2023032157号 京公网安备11011402053616号
  • {{ item.name }}
  • {{ item.name }}