• vue中的watch的实际开发笔记


    目录

    前言

    一、watch是什么

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

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

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

     3.场景3:深度监听

    4.场景4:赋值使用

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

    6.场景6:页面的跳转

    总结


    前言

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

    一、watch是什么

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

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

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

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

    代码如下:

    1. watch: {
    2. isLoading (newVal, oldVal) { //1. 原来的值,和现在的值,是否有变化,如果有变化,触发这个函数
    3. console.log('2 isLoading newVal is ', newVal, ' , oldVal is ', oldVal)
    4. //2. 当加载完成时, 还需要判断用户是否已登录
    5. const username = getLoginedUsername(this.$store)
    6. if (username != undefined && username != null) {
    7. // 已登录时, 跳转首页
    8. toHomePage(this)
    9. }
    10. }
    11. },
    12. computed: {
    13. isLoading () {
    14. return isLoading(this.$store)
    15. }
    16. },
    17. import { isLoading, getLoginedUsername } from 'utils/utils'

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

    1.data的代码如下:

    1. data() {
    2. return {
    3. verifyData: this.propData,
    4. editBoxShow: false,
    5. type3: [{
    6. worksRegion: '0',
    7. label: '牛奶'
    8. },{
    9. worksRegion:"1",
    10. label: "面包"
    11. },
    12. {
    13. worksRegion:"3",
    14. label: "水果"
    15. }
    16. ],
    17. type4: [{
    18. worksRegion: '0',
    19. label: '炸鸡'
    20. },{
    21. worksRegion:"1",
    22. label: "汉堡"
    23. },{
    24. worksRegion:"2",
    25. label: "可乐"
    26. },
    27. {
    28. worksRegion:"3",
    29. label: "北京烤鸭"
    30. }
    31. ],
    32. type5:[],
    33. queryParams:{
    34. id:"",
    35. workType:'',//1开发 , 2 测试
    36. foll:true
    37. },
    38. };
    39. }

    2.watch的监听

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

    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:深度监听

    1. 说明:
    2. handler: 固定方法触发
    3. deep: 开启深度监听
    4. immediate: 页面初始化时handler立即执行一次
    5. data(){
    6. return {
    7. user: {
    8. userNo: "",
    9. sex: ""
    10. }
    11. }
    12. },
    13. // 监听整对象
    14. watch: {
    15. // 监听整个对象,对象里的每个属性值的变化都会执行handler,执行后获取的 newVal 值和 oldVal 值是一样的
    16. user: {
    17. handler(newVal, oldVal){
    18. console.log(newVal, oldVal);
    19. },
    20. deep: true,
    21. immediate: true
    22. }
    23. }
    24. watch: {
    25. // 监听对象的某个属性,被监听的属性值发生变化就会执行函数,但获取的 newVal 值和 oldVal 值不一样
    26. 'user.userNo': {
    27. handler(newVal, oldVal){
    28. console.log(newVal, oldVal);
    29. },
    30. deep: true,
    31. immediate: true
    32. }
    33. }

    4.场景4:赋值使用

    1. watch: {
    2. traysNos (newVal, oldVal) {
    3. if ((newVal && !oldVal) || (newVal && oldVal && newVal !== oldVal)) {
    4. this.filterDeliverysOutLists = []
    5. this.deliverysOutsList = this.fullsDeliverysOutsLists
    6. }
    7. }
    8. },

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

    1. data () {
    2. return {
    3. loading: false,
    4. submitsCheck: true,
    5. }
    6. },
    7. watch: {
    8. 'order.traysNos' (val) {
    9. if (val == null || val == '') {
    10. this.submitsCheck = true
    11. } else if (val) {
    12. this.submitsCheck = false
    13. }
    14. }
    15. },

    6.场景6:页面的跳转

    1. watch: {
    2. reservesNo (newVal, oldVal) {
    3. if ((newVal && !oldVal) || (newVal && oldVal && newVal !== oldVal)) {
    4. this.reservesNo = newVal // 获取到新值
    5. this.$router.replace({ // 跳转,注意,这种跳转,是不可以回退的
    6. query: {
    7. reservesNo: this.reservesNo // 传新值
    8. }
    9. })
    10. this.findOrderNo() // 执行其他的函数
    11. }
    12. }
    13. },

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


    总结

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

  • 相关阅读:
    软件工程填空题(50题)
    再探数据结构
    tiup cluster stop
    Python-数据结构-字典
    Python常见的数据分析工具有哪些?
    刷题——Python篇(2)类型转换
    Ubuntu安装AdGuardhome(树莓派安装AdGuardhome)
    sql注入(6), 更新注入, 堆叠注入, 宽字节注入
    倍福PLC实现绝对值编码器原点断电保持---bias的使用
    openGauss学习笔记-99 openGauss 数据库管理-管理数据库安全-客户端接入认证之配置文件参考
  • 原文地址:https://blog.csdn.net/weixin_46442877/article/details/127732967