el-dialog 里面的 el-form 重置表單問題


事情要從一次開發一個功能開始說起,我使用的是在el-dialog里面放el-form來存放表單數據,點擊按鈕后顯示el-dialog,然后添加、編輯、查看都使用同一個el-dialog。

然后在操作完編輯后,我再次去點擊添加,就發現編輯的數據留在el-dialog里面了,這顯然不是我想要的結果。

然后就去文檔里面找,能不能打開彈框時把表單重置了。

image-20200925235420719

然后我就寫了如下代碼(偽代碼)

// 打開點擊添加按鈕處理
handleAdd(){
  // 打開彈框(略)
  // 重置表單
  this.$refs['form'].resetFields()
  // 加載數據(略)
}

發現不起作用,控制台一直提示 this.$refs['form'] 為 undefined,然后又看了官方文檔:

image-20200926000309286

原來如此,那我們就寫個 handleOpenDialogForm 的方法,在打開 el-dialog 進行重置表單吧。

但是這顯然有問題,如果重置方法在數據回填后執行了,那我們在編輯和查看時豈不是一直顯示空數據了。

el-dialog 既然有 open 事件,那如果有 close 事件的話,我們在關閉彈框時重置表單,這不就可以了。

image-20200926001109130

看了 el-dialog 的文檔,的確有close事件,然后我就寫了這樣的代碼:

// 關閉彈框,清空表單
handleCloseDialogForm() {
    // 重置表單
    this.$nextTick(() => {
        this.$refs['form'].resetFields()
    })
}

這樣在關閉彈框時就會重置表單為初始化的值了。但是初始化值指的是第一次加載的值,並不是指寫在data里面的默認值。所以按照上面的步驟操作以后,第一次點擊編輯按鈕,初始化值就會被記錄成編輯時加載的數據,然后關閉時就會重置成編輯時加載的數據。但是如果第一次點擊的是添加,初始化值就是data里面定義的默認值,就不會出現bug。

基於以上分析我們如果我們在第一次打開彈框的時候,把data里面定義的默認值設置進去,表單就會把這個值記錄為默認值。遺憾的是並沒有相關操作的API,這個方法沒法使用。

以上就是使用 resetFields 時遇到的問題,筆者技術能力有限以上方法就棄用了。

解決方法:

既然以上方法我們做不了的話,我們得想其他方法。

我們可以定義一個變量,把data里面初始化的值拷貝到這個變量里面,然后不去修改它,這樣我們就可以得到data的默認值。在關閉彈框時,我們把這個變量的值賦值給data,這樣data里面的值就是初始化的值了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM