vue中watch的实际开发学习笔记

作者:奶厂小程 时间:2024-04-30 10:41:15 

前言

本文主要是积累一下在使用前端的watch开发过程中遇到的问题点和经验。

一、watch是什么

根据本人的理解,它就是一个 * ,就是说监听的某个数据发生了变化,那么它就会执行相对应的函数。它主要使用在哪些场景呢,比如:一个数据影响着多个数据的业务。

watch:{  // 当这个workType发生改变时,就是1个数据的改变,就会影响到type5和foll的改变
   'queryParams.workType':function (newName,oldName){
     if(newName==1){
       this.type5 = this.type3,
       this.foll = true
     }else if(newName==2){
       this.type5 = this.type4,
       this.foll = false
     }
   }
 },

二、watch不同的实际使用场景开发案例

1.场景1:加载完成后登录监听

代码如下:

watch: {
   isLoading (newVal, oldVal) { //1. 原来的值,和现在的值,是否有变化,如果有变化,触发这个函数
     console.log('2 isLoading newVal is ', newVal, ' , oldVal is ', oldVal)

//2. 当加载完成时, 还需要判断用户是否已登录
     const username = getLoginedUsername(this.$store)
     if (username != undefined && username != null) {
       // 已登录时, 跳转首页
       toHomePage(this)
     }
   }
 },

computed: {
   isLoading () {
     return isLoading(this.$store)
   }
 },

import { isLoading, getLoginedUsername } from 'utils/utils'

2.场景2:前面不同的选择框,影响下面的不同的选择框的选项内容

1.data的代码如下:

data() {
   return {
     verifyData: this.propData,
     editBoxShow: false,

type3: [{
       worksRegion: '0',
       label: '牛奶'
     },{
       worksRegion:"1",
       label: "面包"
     },
       {
         worksRegion:"3",
         label: "水果"
       }
     ],
     type4: [{
       worksRegion: '0',
       label: '炸鸡'
     },{
       worksRegion:"1",
       label: "汉堡"
     },{
         worksRegion:"2",
         label: "可乐"
       },
       {
         worksRegion:"3",
         label: "北京烤鸭"
       }
     ],
     type5:[],

queryParams:{
       id:"",
       workType:'',//1开发 , 2 测试
       foll:true
     },

};
}

2.watch的监听

watch:{  // 当这个workType发生改变时,就是1个数据的改变,就会影响到type5和foll的改变
   'queryParams.workType':function (newName,oldName){
     if(newName==1){
       this.type5 = this.type3,
       this.foll = true
     }else if(newName==2){
       this.type5 = this.type4,
       this.foll = false
     }
   }
 },

3.场景效果描述

比如:      第1个选框:开发;

                第2个选框: A,B,C

比如:      第1个选框:测试;

                第2个选框: A,B,C,D

  由上所示,当第1个选框,选择“开发”选项时,则第2个选框出现的选项内容为ABC;当第1个选框,选择“测试”选项时,则第2个选框出现的选项内容为ABCD;这时就实现了当初的上一个不同选项出现下一个不同的选项内容的效果了。

原理描述:它是主要是通过判断queryParams的里面的workType的参数的变化,来进行监听的,如果当用户点了开发这个选项,那么这个workType的newName就是1了,所以就触发了watch里面的这个函数了,那么这里就可以进行业务方面的处理即可。

3.场景3:深度监听

说明:

handler: 固定方法触发
deep: 开启深度监听
immediate: 页面初始化时handler立即执行一次

data(){
   return {
     user: {
       userNo: "",
       sex: ""
     }
   }
 },

// 监听整对象
 watch: {
       // 监听整个对象,对象里的每个属性值的变化都会执行handler,执行后获取的 newVal 值和 oldVal 值是一样的
   user: {
     handler(newVal, oldVal){
       console.log(newVal, oldVal);
     },
     deep: true,
     immediate: true
   }
 }

watch: {
      // 监听对象的某个属性,被监听的属性值发生变化就会执行函数,但获取的 newVal 值和 oldVal 值不一样
   'user.userNo': {
     handler(newVal, oldVal){
       console.log(newVal, oldVal);
     },
     deep: true,
     immediate: true
   }
 }

4.场景4:赋值使用

watch: {
   traysNos (newVal, oldVal) {
     if ((newVal && !oldVal) || (newVal && oldVal && newVal !== oldVal)) {
       this.filterDeliverysOutLists = []
       this.deliverysOutsList = this.fullsDeliverysOutsLists
     }
   }
 },

5.场景5:改变标记的true和false

data () {
   return {
     loading: false,
     submitsCheck: true,
   }
 },

watch: {
   'order.traysNos' (val) {
     if (val == null || val == '') {
       this.submitsCheck = true
     } else if (val) {
       this.submitsCheck = false
     }
   }
 },

6.场景6:页面的跳转

watch: {
   reservesNo (newVal, oldVal) {
     if ((newVal && !oldVal) || (newVal && oldVal && newVal !== oldVal)) {
       this.reservesNo = newVal // 获取到新值
       this.$router.replace({  // 跳转,注意,这种跳转,是不可以回退的
         query: {
           reservesNo: this.reservesNo  // 传新值
         }
       })
       this.findOrderNo()  // 执行其他的函数
     }
   }
 },

这个主要是深度监听的使用,如何监听某个对象中的某个属性的变化,就是上面这个案例,看业务需求来进行使用。

补充:watch简写形式

如果只是监听单个简单的数据,使用watch的简写形式就可以满足需求。

代码如下:

<script>
export default {
 name: "Home",
 data() {
   return {
     text: ""
   };
 },
 watch: {
   text(newVal, oldVal) {

}
 },
};
</script>

来源:https://blog.csdn.net/weixin_46442877/article/details/127732967

标签:vue,watch,开发
0
投稿

猜你喜欢

  • 解决Js先触发失去焦点事件再执行点击事件的问题

    2024-04-22 12:50:33
  • 浅谈Python项目的服务器部署

    2021-01-10 04:26:48
  • Python操作dict时避免出现KeyError的几种解决方法

    2022-12-30 14:48:26
  • Sharding-JDBC自动实现MySQL读写分离的示例代码

    2024-01-18 00:02:35
  • php ios推送(代码)

    2024-03-26 14:22:34
  • 基于python 爬虫爬到含空格的url的处理方法

    2023-04-16 09:55:47
  • pytorch制作自己的LMDB数据操作示例

    2023-05-24 11:51:27
  • Python学习笔记之Zip和Enumerate用法实例分析

    2021-09-03 19:58:50
  • 深入浅析Pytorch中stack()方法

    2021-12-26 01:40:08
  • 鼠标驱动图片变化

    2009-07-26 10:03:00
  • 详解django中Template语言

    2022-12-01 21:20:59
  • asp access数据库并生成XML文件范例

    2011-03-29 10:49:00
  • 超详细,教你用python语言实现QQ机器人制作教程

    2023-10-05 10:12:53
  • 解密Python中的描述符(descriptor)

    2023-12-05 08:28:48
  • opencv python在视屏上截图功能的实现

    2021-04-14 04:00:30
  • Go GORM 事务详细介绍

    2024-02-21 21:03:05
  • Python2包含中文报错的解决方法

    2021-09-12 20:51:24
  • MySQL服务维护笔记第1/2页

    2024-01-27 02:08:03
  • MySQL实现数据更新的示例详解

    2024-01-13 23:13:44
  • Centos环境部署django项目的全过程(永久复用)

    2021-06-17 00:37:28
  • asp之家 网络编程 m.aspxhome.com