Vue--1.7watch侦听器(监视器)

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

语法:

1.简单写法->简单类型数据,直接监视

复制代码
    const app = new Vue({
      el: '#app',
      data: {
        words:''
      },
      watch:{
        words(newValue,oldValue){

        }
      }
    })

    const app = new Vue({
      el: '#app',
      data: {
        obj: {
          words: ''
        }
      },
      watch: {
        'obj.words'(newValue) {

        }
      }
    })

案例:翻译软件

复制代码
<!doctype html>
<html>

<head>
  <meta charset="utf-8">
</head>

<body>
  <div id="app">
    <textarea rows="10" cols="40" v-model="obj.words"></textarea>
    <textarea rows="10" cols="40" v-model="result"></textarea>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        obj: {
          words: ''
        },
        result: '',
        timer: null
      },
      watch: {
        '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
          }, 300)
        }
      }
    })
  </script>
</body>

</html>

2.完整写法->添加额外配置项

1)deep:true对复杂类型深度监视

2)immediate:true初始化立刻执行一次handler方法

复制代码
    const app = new Vue({
      el: '#app',
      data: {
        obj: {
          words: '',
          lang:''
        }
      },
      watch: {
        数据属性名:{
            deep:true,//深度监视
            immediate: true,//立即执行,一进入页面handler就立刻执行
            handler(newValue){
                
            }
        }
      }
    })

案例:翻译软件Pro

复制代码
<!doctype html>
<html>

<head>
  <meta charset="utf-8">
</head>

<body>
  <div id="app">
    翻译成语言:<select v-model="obj.lang">
      <option value="english">英语</option>
      <option value="franch">法语</option>
      <option value="italy">意大利</option>
    </select>
    <br><br>
    <textarea rows="10" cols="40" v-model="obj.words"></textarea>
    <textarea rows="10" cols="40" v-model="result"></textarea>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        obj: {
          words: '',
          lang: 'english'
        },
        result: '',
        timer: null
      },
      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
            }, 300)
          }
        }
      }
    })
  </script>
</body>

</html>
相关推荐
只会cv的前端攻城狮11 分钟前
动态组件架构设计:从配置到事件驱动全链路解析
前端·vue.js
飞天狗13 分钟前
Next.js 16 App Router 实战:服务端组件与流式渲染
前端·next.js
万敏16 分钟前
Vue3 全栈实战第二周:Pinia + Vite + Router + axios 完整记录
vue.js·node.js·全栈
OpenTiny社区17 分钟前
TinyEngine 2.11版本发布:AI 进一步融入画布,Vue 工程可一键转DSL
前端·vue.js·github
小雪_Snow32 分钟前
JavaScript 中的三种常用事件
开发语言·前端·javascript
Hyyy34 分钟前
Electron-Vite是什么,和Vite有什么区别
前端·面试
蓝胖子酱1 小时前
在 Electron 中用 electron-store 实现加密存储与自定义格式文件
前端·javascript·数据库
虚焦像素_1 小时前
海康 Web 插件版接入指南:用法与注意事项
前端
虚焦像素_1 小时前
海康 Web 无插件版接入指南:用法与注意事项
前端
To_OC2 小时前
LC 22 括号生成:刷完这道题,我终于搞懂回溯剪枝了
javascript·算法·leetcode