当前位置: 首页 > news >正文

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>

相关文章:

  • ROS1云课→15主题与坐标系
  • 【1. GPIO】
  • Netty——NIO(Selector处理read事件)代码示例
  • 计算机与软件技术系毕业设计(论文)实施意见-计算机毕业设计论文怎么写
  • C/C++语言100题练习计划 83——背包问题(贪心算法实现)
  • JS:数组类型及常用的方法使用
  • Oracle-job跑批变慢案例
  • java/php/python在线求助救援网站vue+elementui
  • Vivado关联Vscode,解决Vscode自动保存和卡顿问题
  • Java基础用Date类编写万年历
  • 前端面试题2
  • 通信算法之七十八:无人机反制—精华总结
  • Leetcode--剑指Offer
  • 【web-攻击应用程序框架】(12.2)共享主机与服务提供商:攻击、保障
  • JavaScript-操作BOM对象
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 78. Subsets
  • Angular Elements 及其运作原理
  • C学习-枚举(九)
  • DataBase in Android
  • ES6--对象的扩展
  • gf框架之分页模块(五) - 自定义分页
  • Git初体验
  • Java方法详解
  • js操作时间(持续更新)
  • opencv python Meanshift 和 Camshift
  • SpiderData 2019年2月13日 DApp数据排行榜
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Vue全家桶实现一个Web App
  • 产品三维模型在线预览
  • 观察者模式实现非直接耦合
  • 诡异!React stopPropagation失灵
  • 机器学习 vs. 深度学习
  • Java性能优化之JVM GC(垃圾回收机制)
  • 翻译 | The Principles of OOD 面向对象设计原则
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (C)一些题4
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET 8.0 中有哪些新的变化?
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • @Bean注解详解
  • [8481302]博弈论 斯坦福game theory stanford week 1
  • [Android学习笔记]ScrollView的使用
  • [autojs]autojs开关按钮的简单使用
  • [JavaWeb学习] Spring Ioc和DI概念思想
  • [LeetCode]剑指 Offer 40. 最小的k个数
  • [LeetCode刷题笔记]1 - 两数之和(哈希表)
  • [Linux] 一文理解HTTPS协议:什么是HTTPS协议、HTTPS协议如何加密数据、什么是CA证书(数字证书)...
  • [luoguP2401] 不等数列
  • [NAND Flash 7.1] 闪存系统性能优化方向集锦?AC timing? Cache? 多路并发?
  • [objective-c]关于KVC--KVO--KVB
  • [Real world Haskell] 中文翻译:第三章 定义类型,流式函数