zoukankan      html  css  js  c++  java
  • vue中监听用户是否编辑表单操作

    周六是比较适合回顾以及反思自己本周工作遇到问题的时间,在疫情期间,宅在家里翻一翻自己的一些小tips 也算是加深下自己的方法解决记忆 

    在我们日常的工作中经常会遇到需求 :这个表单填写的页面 ,当用户修改了内容时,点击返回提示,未修改内容则直接返回?

    需求分析:其实这个问题归于监测用户在页面中是否进行了操作?? 

    共计对比了两个方法:

    方法一:

     使用vue的updated的钩子:updated是数据更新后调用,相对应的beforeUpdate,是启用数据更新,在数据更新前调用

     原理就是监测data()中的数值变化:当data中的某个值改变的时候就进行计数增加

     使用方法

      updated:function () {
        this.updataUp++; //用于记录更新次数的变量
         //console.log("用户更改了数据"+this.updataUp);
      },

    下图是一张点击弹框的触发事件 打开组件+关闭组件 =2次触发了data的更新

     因为updated监测的可是data中的所有值哦,所以任何一个变量的值改变的时候都会+1 ,

    这种方法存在的问题

    • data中变量过多的时候,需要我们自己去过滤掉非表单数据触发的次数 (比如打开弹框,此时控制弹框的变量的值改变)

    比较适合简单的表单数据

    方法二:

     vue的watch方法 也为我们提供了数据监测的功能

     templateList: {
          handler (val) { //templateList 为数组 调用hander 将数值传入到页面中
            if (val) {  
              this.updateCount++
    console.log("用户编辑了"+this.updateCount)
            }
          },
          deep: true //遍历较深的数据结构
        }
    

      参照vue的createWatcher  

    function createWatcher (
      vm: Component,
      expOrFn: string | Function,
      handler: any,
      options?: Object
    ) {
      if (isPlainObject(handler)) {
        options = handler
        handler = handler.handler
      }
      if (typeof handler === 'string') {
        handler = vm[handler]
      }
      return vm.$watch(expOrFn, handler, options)
    }
    

      这样对于templateList数据列表进行改变时候,都可以监控到,

      一个页面中不一定只存在templateList一个列表,如果存在其他的,进行添加就可以。

    注意点:如果页面初始化时候请求了接口,并且对监控的数据进行了改变,此时返回判断需要减去这一次的更改

    该方法返回的时候,只需要判断是否 >1(数据根据页面的初始化更新次数进行调整)即可

    学习加油~

  • 相关阅读:
    winform 关于Messagebox自动定时关闭
    Git常用命令
    使用消息队列异步化系统
    在Servlet(或者Filter,或者Listener)中使用spring的IOC容器
    基于Annotation与SpringAOP的缓存简单解决方案
    Ant自动构建
    Quartz定时调度
    Sybase数据库的分页功能
    oracle 日期相减
    n个List<Map>合并,Map中某属性值相等的value值相加
  • 原文地址:https://www.cnblogs.com/mfyngu/p/12542100.html
Copyright © 2011-2022 走看看