element-ui使用技巧

733 阅读1分钟

版本: 2.9.2

自定表单组件的验证

业务开发中会遇到组件库没有的表单组件,这个时候就会涉及到验证问题

<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
  <el-form-item label="活动名称" prop="name">
    <el-input v-model="ruleForm.name"></el-input>
  </el-form-item>
<el-form>

如过把<el-input>换成自定义的组件,则可以通过inject: ["elFormItem"]获得<el-form-item>实例 在值发生变化的时候,在组件内部调用this.elFormItem.validate() 从而避免在组件外面使用

this.$nextTick(() => {
  this.$refs.form.validateField("name");
});

表单的行选中

需要注意的是,选中一行需要"一行的渲染数据",而不仅仅是”唯一的key"

<el-table-column
  type="selection"
  :reserve-selection="true"
>
</el-table-column>

reserve-selection这个属性没起效果,采用另一种方案

<el-table
  row-key="id"
  ref="table"
  @select-all="handleSelect"
  @select="handleSelect"
>
</el-table>
  data() {
    return {
      selectRowObj: {},
      }
    };
  },
  methods: {
    handleSelect(rows) {
      rows.forEach(item => {
        this.selectRowObj[item.id] = item;
      });
    },
  }

切换页面时要主动触发选中

Object.keys(this.selectRowObj).forEach(key => {
  this.$refs.table.toggleRowSelection(this.selectRowObj[key], true);
});

使用对象去记录的原因有两点

  1. 第一页选中了几行,切换到第二页,再次选中,是不会记录上一次的选中的
  2. toggleRowSelection也会触发选中事件