• vue之elementui的异步表单,防抖,节流验证,之做进vuex之actions


    1>vue页面

     data() {
        let validcodeName = (rule, value, callback) => {
          let parmas = {
            name: value,
            rule: rule,
            callback: callback
          };
          this.getProjectByName(parmas);
        };
        return {
    rules: {
    //注意,不管是防抖还是节流,都得在这里去加,不能加在
    validcodeName里面
    
    
     demandName: [{ required: true, validator: this.debounce(validcodeName, 1000), trigger: 'change' }],

    }
    }
     methods: {
        
    ...mapActions(['getFunctionByName']),
        //发送请求
        sendGetFunctionByName(rule, value, callback) {
          let parmas = {
            name: value,
            projectId: this.$route.query.id,
            type: '需求',
            rule: rule,
            callback: callback
          };
          this.getFunctionByName(parmas);
        },
        //防抖
        debounce(fn, delay) {
          // 记录上一次的延时器
          var timer = null;
          var delay = delay || 200;
          return function() {
            var args = arguments;
            var that = this;
            // 清除上一次延时器
            clearTimeout(timer);
            timer = setTimeout(function() {
              fn.apply(that, args);
            }, delay);
          };
        },
        //节流
        throttle(fn, wait) {
          var timer = null;
          return function() {
            var context = this;
            var args = arguments;
            if (!timer) {
              timer = setTimeout(function() {
                fn.apply(context, args);
                timer = null;
              }, wait);
            }
          };
        },

    actions

      actions: {
        getProjectByName(context, data) {
          console.log("22", data);
          let params = {
            name: data.name
          };
          SourceMirror.getProjectByName(params).then(res => {
            if (res.data.data === false) {
              data.callback(new Error("项目名称已重复"));
            } else if (
              data.name == undefined ||
              data.name == "" ||
              data.name == null
            ) {
              data.callback(new Error("请输入项目名称"));
            } else {
              data.callback();
            }
            context.commit("verifProjectByName", res.data.data);
          });
        }
      },

     2>场景,blur的input离开就发送修改接口,但是与页面上其他事件冲突,必须请求完了才允许点,这时候就需要防抖了

       <input
                :class="{'isFocus':isFocus|| detail.expectHours}"
                id="inputRef"
                :disabled="saveHandleStatus==4"
                v-model="detail.expectHours"
                @focus="isFocus= true"
                @blur="debounce(hoursBlur,2000)()"  //
                class="hours"
                :placeholder="placeholder"
              />
    @blur="debounce(hoursBlur,2000)()"  //注意这个写法,不这样写,不执行
  • 相关阅读:
    WinForm简单的打包和部署
    C#实现获取枚举的描述
    C#实现序列化对象到XML文档与反序列化
    cookie与session的区别与联系
    windows环境下创建多个Redis实例
    struts2中的constant配置详解
    PowerDesigner使用教程
    配置JAVA环境变量
    CAS实现SSO单点登录原理
    OVER(PARTITION BY)函数用法
  • 原文地址:https://www.cnblogs.com/lsc-boke/p/12982650.html
Copyright © 2020-2023  润新知