IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> VUE的侦听器watch -> 正文阅读

[JavaScript知识库]VUE的侦听器watch

这是关于VUE的watch侦听器的学习笔记,这里面介绍了关于VUE的watch侦听器的一些使用方法和注意事项。
侦听属性watch:
1.当被监视的属性变化时, 回调函数自动调用, 进行相关操作
2.监视的属性必须存在,才能进行监视,否则就监听不了,在浏览器的控制台上就会报错
3.监视的两种写法:
(1).new Vue时传入watch配置
(2).通过vm.$watch()
深度监听:
1.Vue中的watch默认不监测对象内部值的改变(一层),deep一般默认为false。
2.配置deep:true可以监测对象内部值改变(多层)。
3.当配置为deep:true,.Vue自身可以监测对象内部值的改变,但Vue提供的watch默认不可以!
4.使用watch时根据数据的具体结构,决定是否采用深度监视。
computed和watch之间的区别:
1.computed能完成的功能,watch都可以完成。
2.watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作。
这两个的使用,我们要根据具体情况而定。
两个重要的小原则:
1.所被Vue管理的函数,最好写成普通函数,这样this的指向才是vm 或 组件实例对象。
2.所有不被Vue所管理的函数(定时器的回调函数、ajax的回调函数等、Promise的回调函数),最好写成箭头函数,这样this的指向才是vm 或 组件实例对象。
案例代码1:主要是介绍了watch的基本使用方法
案例代码2:主要介绍了深度侦听
案例代码3:主要是对比计算属性和侦听属性

案例代码1:

<!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>监视天气</title>
                  <script type="text/javascript" src="../vue_js/vue.js"></script>
</head>
<body>
        <div id="wd">
                  <h1>武汉的今日真的很{{weather}}</h1>
                  <button @click = "xiugai">切换按钮</button>
        </div> 
        <script>
                Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
                  const watchExampleVM = new Vue({
                                    el:"#wd",
                                    data:{
                                                      isWeather:true
                                    },
                                    computed:{
                                        weather(){
                                                return this.isWeather?'很热':'很冷';
                                        }
                                    },
                                    methods: {
                                        xiugai(){
                                                this.isWeather = !this.isWeather;
                                        }
                                    },
                                    watch:{
                                        //immediate:true, //初始化时让handler调用一下
                                        isWeather(newValue,oldValue){
                                                console.log("天气变化了"+newValue+","+oldValue);
                                        }
                                    }

                  });
        </script>         
</body>
</html>

案例代码2:

<!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>深度监视天气的变化</title>
                  <script type="text/javascript" src="../vue_js/vue.js"></script>
</head>

<body>
                  <div id="root1">
                                    <h1>武汉的天气是真的{{weatherOfHotOrCold}}</h1>
                                    <button @click="weacherListener">点击按钮进行切换变器,并且监视天气的变化</button>
                                    <h1>我们在一个伟大的国家里,这个国家是{{country.Asia.CH}}</h1>
                                    <button @click="showGreatCountry">我爱中国</button>
                  </div>
                  <script>
                                    Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
                                    const weatherVM = new Vue({
                                                      el: '#root1',
                                                      data: {
                                                                        isHotOrCold: true,
                                                                        country: {
                                                                                          Asia: {
                                                                                                            CH: 'China'
                                                                                          }
                                                                        }
                                                      },
                                                      computed: {
                                                                        weatherOfHotOrCold() {
                                                                                          return this.isHotOrCold ? '炎热' : '很冷';
                                                                        }
                                                      },
                                                      methods: {
                                                                        weacherListener() {
                                                                                          this.isHotOrCold = !this.isHotOrCold;
                                                                        },
                                                                        showGreatCountry() {
                                                                                          this.country.Asia.CH = '最大的国家---->中国';
                                                                        }
                                                      },
                                                      watch: {

                                                                        isHotOrCold: {
                                                                                          handler(newValue, oldValue) {
                                                                                                            console.log(newValue + "---" + oldValue);
                                                                                          }
                                                                        },
                                                                        country: {
                                                                                          deep: true,
                                                                                          handler() {
                                                                                                            alert(this.country.Asia.CH + "是世界上最伟大的国家");
                                                                                          }
                                                                        }
                                                      }
                                    })
                  </script>
</body>

</html>

案例代码3:

<!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>姓名案例的watch实现</title>
                  <script type="text/javascript" src="../vue_js/vue.js"></script>
</head>

<body>
                  <div id="demo1">
                                    <h1>我们这里使用计算属性实现姓名案例</h1>
                                    姓氏:<input type="text" v-model="surname"></br>
                                    名字:<input type="text" v-model="name"></br>
                                    完整的名字:<span>{{fullName}}</span>
                                    <h1>我们这里使用watch侦听实现姓名案例,全名那里改变的事件比前面延迟一秒钟</h1>
                                    姓氏:<input type="text" v-model="watch_surname"></br>
                                    名字:<input type="text" v-model="watch_name"></br>
                                    完整的名字:<span>{{watch_fullName}}</span>
                  </div>
                  <script>
                                    Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
                                    const vm = new Vue({
                                                      el: '#demo1',
                                                      data: {
                                                                        surname: '张',
                                                                        name: '三',
                                                                        watch_surname: '李',
                                                                        watch_name: '四',
                                                                        watch_fullName: '李-四'
                                                      },
                                                      computed: {
                                                                        fullName: {
                                                                                          get() {
                                                                                                            return this.surname + "-" + this.name;
                                                                                          }
                                                                        }
                                                      },
                                                      watch: {
                                                                        //正常完整的写法
                                                                        'watch_surname': {
                                                                                          handler(value1) {
                                                                                                            console.log(value1);
                                                                                                            this.watch_fullName = value1 + "-" + this.name;
                                                                                          }
                                                                        },
                                                                        'watch_name': {
                                                                                          handler(value2) {
                                                                                                            setTimeout(() => {
                                                                                                                              console.log(this);
                                                                                                                              this.watch_fullName = this.watch_surname + "-" + value2;
                                                                                                            }, 1000);
                                                                                          }
                                                                        }
                                                                        //简写形式
                                                                        /*watch_surname(val) {
                                                                                          setTimeout(() => {
                                                                                                            console.log(this)
                                                                                                            this.watch_fullName = val + '-' + this.watch_name;
                                                                                          }, 1000);
                                                                        },
                                                                        watch_name(val) {
                                                                                          this.watch_fullName = this.watch_surname + '-' + val
                                                                        }*/
                                                      }
                                    });
                                    //正常完整的写法
                                    /*vm.$watch('watch_surname', {
                                                      handler(value) {
                                                                        this.watch_fullName = value + "---" + this.watch_name;
                                                                        console.log(this.watch_fullName);
                                                      }
                                    })*/
                                    //简写形式
                                    /*vm.$watch('watch_name',function(value){
                                                      console.log(this);
                                                      this.watch_fullName = this.watch_surname + "---" + value;             
                                    })*/
                  </script>
</body>

</html>
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:02:48  更:2022-09-04 01:03:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:45:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码