记录最近遇到的一些坑

146 阅读1分钟

记录最近遇到的一些坑

input使用的坑

input使用为type='number',初始定义为null。输入值没问题,当手动删除后成了空字符串。(ps:el-input也是如此)

<template>
  <div>
    <input type="number" v-model.number="count" />
    {{countType}}
  </div>
</template>

<script>
export default {
  data() {
    return {
      count: 0,
    };
  },
  computed:{
    countType(){
      return typeof this.count
    }
  },
  methods: {
    addCount() {
      this.count += 1;
    },
  },
};
</script>

解决方案

定义个全局指令当需要使用type='number'的input时加上指令

import Vue from "vue";
Vue.directive("null-if-empty", {
  bind(el, binding, vnode) {
    el.addEventListener("input", function (e) {
      let value = e.target.value;
      vnode.componentInstance.$emit("input", value === "" ? null : value);
    });
  },
});

el-form表单自动验证

**领导提了一个需求。一百多个输入、选择控件的表单要在输入完所有验证消息后自动弹出确定提交框。 当时心里就是一万只羊驼在奔走,这不得让我写麻了。

解决方案

<template>
<el-form  @validate="validate"></el-form>
</template>
export default {
    methods:{
        validate() {
            let valid = true;
            Object.keys(this.rules).forEach((key) => {
                let keyArr = key.split(".");
                let a = keyArr[0];
                let b = keyArr[1];
                if (
                a &&
                b &&
                (this.form[a][b] === null ||
                    this.form[a][b] === undefined ||
                    this.form[a][b] === "")
                ) {
                valid = false;
                }

                if (
                !b &&
                a &&
                (this.form[a] === null ||
                    this.form[a] === undefined ||
                    this.form[a] === "")
                ) {
                valid = false;
                }
            });
            if (valid) {
                this.$confirm("信息已填写完整,是否确定提交?", "提示", {
                confirmButtonText: "是",
                cancelButtonText: "否",
                type: "warning",
                }).then(() => {
                let api = ***;
                api(params).then((res) => {
                    if (res.data.result) {
                    this.$emit("close", true);
                    } else {
                    this.$message.warning(res.data.message);
                    }
                });
                });
            }
            },
    }
}