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>
相关推荐
花开盛夏^.^4 小时前
电脑打开多个浏览器Web窗口占用较大的运行内存的原因
前端·浏览器
Dxy12393102165 小时前
JS DES 加密详解
开发语言·javascript·arcgis
充值内卷5 小时前
我给桌面加了个鱼缸:C++ 写后端,WebView2 里养一座 Three.js 小岛
开发语言·javascript·c++
馒头不想说话5 小时前
实体店老板的24小时AI运营员工,写、剪、发全自动,省下一整个团队工资
前端
椒哥8 小时前
一天被问几十次"允许",我统计了 517 次,然后写了个插件
前端·javascript·github
风骏时光牛马8 小时前
生成一个AI稳定性治理及疑难问题分析标题,只需要一个标题,不需要其他的任何文本。
前端
莫西干式秃头8 小时前
用 AI + threejs 写了个浏览器里的 3D 动作游戏《武来》:砍怪、放技能、开 SU7
前端·人工智能·three.js
kyriewen8 小时前
我测了 6 种防请求竞态的写法:只有 1 种真能打
前端·javascript·程序员
孟健8 小时前
用 WorkBuddy 做个人名片网页,挂上开源设计技能后效果完全不同了
前端·人工智能·ai编程
IT_陈寒8 小时前
SpringBoot自动配置的坑,这次终于爬出来了
前端·人工智能·后端