Vue问题汇总


一、双向数据绑定的问题

问题描述:一个list页,点击编辑数据是其中的一条。修改后,数据没有提交成功。再次点击此条数据编辑,显示的仍然是没有提交成功的数据。

解决方法:

/* 修改内容*/
    handleUpdate(row) {
      this.form = JSON.parse(JSON.stringify(row)) //this.form = row 就会有双向数据绑定的问题
}

二、富文本编辑器的使用

参考:

1.富文本框显示输入字数,超过限制不能输入

vue代码,maxContent 自定义最大字符数

"内容" prop="content">
          ref="myQuillEditor" v-model="form.content" :options="editorOption" maxlength="10" @change="onEditorChange($event)" />
          class="wordNumber">{{ TiLength }}/{{ maxContent }}
        

js部分

// 富文本显示字符数
    onEditorChange(event) {
      event.quill.deleteText(this.maxContent, 7)
      if (this.form.content === '') {
        this.TiLength = 0
      } else {
        // 样式也算字符数,因为存进数据库的也包含样式
        this.TiLength = this.form.content.length - 7 // event.quill.getLength()-1 //获取实际文字长度,空格等不会计算在内
      }
    }

css

 .wordNumber{
    position: relative;
    left: 420px;
    top: -25px;
  }

这样编辑富文本的时候就只能输入限定长度的字符了,但是这个防止不了粘贴到富文本的情况。因此提交时增加一个验证即可

if (this.form.content.length > (this.maxContent+7)) {
        this.$message({ message: '内容超过500字!', type: 'warning' });
        return;
      }

三、动态数据验证

需求描述:一个表单,分上中下三部分。上面是必填,中间是选择项,如果中选择true则下边是必填。否则要去掉验证

vue

"话题" prop="topic" :rules="[{ required: form.status === 0, message: '请输入话题标题!', trigger: 'blur' },{ min: 1, max: 20, message: '长度在20个字符', trigger: 'blur' }]">
          "form.topic" clearable />
        
        "蓝方观点" class="blue" prop="bluePoint" :rules="[{ required: form.status === 0, message: '请输入蓝方观点!', trigger: 'blur' }]">
          "form.bluePoint" clearable maxlength="20" />
        
        "初始人数" class="blue" prop="blueIni" :rules="[{ required: form.status === 0, message: '请填写蓝方初始票数!', trigger: 'blur' }]">
          "form.blueIni" clearable type="number" min="0" />
        
        "红方观点" class="red" prop="redPoint" :rules="[{ required: form.status === 0, message: '请输入红方观点!', trigger: 'blur' }]">
          "form.redPoint" clearable maxlength="20" />
        
        "初始人数" class="red" prop="redIni" :rules="[{ required: form.status === 0, message: '请填写红方初始票数!', trigger: 'blur' }]">
          "form.redIni" clearable type="number" min="0" />
        
        "投票时间">
          "11">
            "begindate" :rules="[{ required: form.status === 0, message: '请选择投票开始日期', trigger: 'change' }]">
              "form.begindate" type="datetime" placeholder="选择日期" value-format="yyyy-MM-dd HH:mm:ss" style="width: 100%;" />
            
          
          class="line" :span="2" style="text-indent: 1em">至
          "11">
            "endDate" :rules="[{ required: form.status === 0, message: '请选择投票结束时间', trigger: 'change' }]">
              "form.endDate" type="datetime" placeholder="选择日期" value-format="yyyy-MM-dd HH:mm:ss" style="width: 100%;" @change="checkDate" />
            
          
        

js去掉验证

 // 选择隐藏话题去除话题验证
    selectStatus() {
      if (this.form.status === 1) {
        this.$refs['form'].clearValidate(['topic', 'bluePoint', 'blueIni', 'redPoint', 'redIni', 'begindate', 'endDate'])
      } else {
        this.$refs['form'].validateField(['topic', 'bluePoint', 'blueIni', 'redPoint', 'redIni', 'begindate', 'endDate'])
      }
    }