vue使用el-dialog關(guān)閉后重置數(shù)據(jù)的最佳方法

此方法試用所有需要重置數(shù)據(jù)的場景

el-dialog打開一次之后,再次打開之前的數(shù)據(jù)不會銷毀,依然存在。

我們需要在關(guān)閉后重新初始化數(shù)據(jù)。

重置表單的方法

this.$refs[formRef].resetFields();

有些數(shù)據(jù)不是表單中的數(shù)據(jù),也需要重置。

難道一個(gè)個(gè)的重新手動賦值嗎?當(dāng)然可以,就是比較麻煩。好在vue幫我們保存了一份原始數(shù)據(jù),直接把data復(fù)制為原始數(shù)據(jù)即可

this.$data = this.$options.data();

以上就可以正常運(yùn)行,
但是如果data中有表單驗(yàn)證相關(guān),會導(dǎo)致控制臺出現(xiàn)報(bào)錯信息,如下面代碼中的ruleValidate,排除即可。

data () {
  return {
    dialogVisible: false,
    submitLoading: false,
    model: {
      id: 0,
      carCard: "",
      driver: "",
      remark: "",
    },
    ruleValidate: {
      carCard: {required: true, message: "不能為空", trigger: "blur"},
    },
  };
},

重置表單數(shù)據(jù),使用的地方特別多,我們封裝為全局方法

//重置表單,formRef為表單的ref值,excludeFields為要排除重新初始化值得屬性
Vue.prototype.$reset = function (formRef, ...excludeFields) {
  this.$refs[formRef].resetFields();
  let obj1 = this.$data;
  let obj2 = this.$options.data.call(this);
  if (!excludeFields || excludeFields.length === 0) {
    excludeFields = ["ruleValidate"];
  }
  for (let attrName in obj1) {
    if (excludeFields && excludeFields.includes(attrName)) {
      continue;
    }
    obj1[attrName] = obj2[attrName];
  }
};

使用方法

el-dialog的close事件總調(diào)用

<template>
  <el-dialog
      v-el-drag-dialog
      :close-on-click-modal="false"
      :visible.sync="dialogVisible"
      :title="model.id === 0 ? '新增車輛' : '編輯車輛'"
      class="car-edit"
      width="450px"
      top="5vh"
      @close="$reset('form')">
    <el-form ref="form"
             :model="model"
             :rules="ruleValidate"
             class="formFillWidth"
             label-width="50px">
      <el-form-item label="車牌" prop="carCard">
        <el-input v-model="model.carCard" placeholder="請輸入"/>
      </el-form-item>
      <el-form-item label="司機(jī)" prop="driver">
        <el-input v-model="model.driver" placeholder="請輸入"/>
      </el-form-item>
      <el-form-item label="備注" prop="remark">
        <el-input v-model="model.remark" placeholder="請輸入"/>
      </el-form-item>
    </el-form>
    <span slot="footer">
      <el-button @click="dialogVisible = false">取消</el-button>
      <el-button :loading="submitLoading" type="primary" @click="handleSubmit">保存</el-button>
    </span>
  </el-dialog>
</template>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當(dāng)在唯一索引所對應(yīng)的列上鍵入重復(fù)值時(shí),會觸發(fā)此異常。 O...
    我想起個(gè)好名字閱讀 5,974評論 0 9
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,335評論 0 17
  • 表單驗(yàn)證后輸入正確值錯誤提示不消失 不滿足以下條件可能就出現(xiàn)驗(yàn)證不走心的狀態(tài)~~~ el-input綁定的v-mo...
    Hsugar閱讀 32,180評論 4 4
  • Repeater Burp Repeater(中繼器)是用于手動操作和補(bǔ)發(fā)個(gè)別HTTP請求,并分析應(yīng)用程序的響應(yīng)一...
    Eva_chenx閱讀 9,858評論 1 12
  • 寫作是一門學(xué)問,只不過寫作不是一門很高上的文學(xué),它不需要學(xué)歷高低,只要一支筆,一個(gè)夢,加上足夠的閱歷,又精于技巧上...
    夏墨跡q閱讀 272評論 0 1

友情鏈接更多精彩內(nèi)容