element-UI 多表單重置的時候的坑


問題細化一下是這樣的:
比如我有一個用來修改數據的表單,第一條數據是{name: 'Xixi', age: 12},打開表單后就有兩個輸入框分別填的是Xixi和12,此時我修改Xixi為Haha,調用this.$refs[].resetFields()后,該表單數據恢復為Xixi和12,這是沒問題的。
現在我要修改第二條數據{name: 'Dog', age: 4},打開表單后將Dog修改為Cat,此時我再次調用this.$refs[].resetFields(),表單數據理想情況應該被重置為{name: 'Dog', age: 4},可是實際上會變成第一次傳入的數據{name: 'Xixi', age: 12},而理想的重置應該是重置為表單打開后的數據,無論是第幾次被打開。

也就是說:
對於增操作,這個resetFields()是有效的,因為每次重置的值都是空。
對於改操作,因為每條數據不同,每次重置需要回到的值不同,但是resetFields()只認第一次打開表單后接收到的數據,這個功能就沒用了。

解決辦法:
現在我的解決辦法是,利用v-if的特性,進行form的銷毀和重建,強行讓每一次改操作拿到的數據為傳說中的初始值。

 

 <el-dialog  :visible.sync="dialogFormVisible" :modal='dialogModalDisable' >
          <template v-if="!isEdit">
          <el-form :model="form" status-icon :rules="rules" ref="form" :label-width="formLabelWidth" size="small" v-if="dialogFormVisible">
            <el-form-item label="用戶名" prop="username" >
              <el-input type="text" v-model="form.username" autocomplete="off" ></el-input>
            </el-form-item>
            <el-form-item label="密碼" prop="password">
              <el-input type="password" v-model="form.password" autocomplete="off" ></el-input>
            </el-form-item>
            <el-form-item label="超級管理員密碼" prop="superpassword">
              <el-input type="password" v-model="form.superpassword" autocomplete="off" ></el-input>
            </el-form-item>
            <el-form-item label="核心交換機ID" prop="switch_id" required message="請輸入密碼">
              <el-select v-model="form.switch_id" placeholder="請選擇核心交換機ID">
                <el-option
                  v-for="item in switch_group"
                  :key="item.id"
                  :label="item.switch_ipaddr"
                  :value="item.id">
                  <span style="float: left">{{ item.switch_ipaddr }}</span>
                  <span style="float: right; color: #8492a6; font-size: 13px">{{ item.id }}</span>
                </el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="狀態" prop="is_enabled">
              <el-switch
                v-model="form.is_enabled"
                active-color="#13ce66"
                inactive-color="#ff4949">
              </el-switch>
            </el-form-item>
            <el-form-item label="備注" prop="comments">
              <el-input type="text" v-model="form.comments" autocomplete="off" ></el-input>
            </el-form-item>
          </el-form>
            <div slot="footer" class="dialog-footer">
              <el-button type="primary" @click="submitForm('form')">提交</el-button>
              <el-button @click="resetForm('form')">重置</el-button>
            </div>
          </template>
          <template v-else >
          <el-form :model="editform" status-icon :rules="rules" ref="editform" :label-width="formLabelWidth" size="small" v-if="dialogFormVisible">
            <el-form-item label="ID" prop="editID" >
              <span>{{editform.editID}}</span>
            </el-form-item>
            <el-form-item label="用戶名" prop="username" >
              <el-input type="text" v-model="editform.username" autocomplete="off" ></el-input>
            </el-form-item>
            <el-form-item label="密碼" prop="password">
              <el-input type="password" v-model="editform.password" autocomplete="off" ></el-input>
            </el-form-item>
            <el-form-item label="超級管理員密碼" prop="superpassword">
              <el-input type="password" v-model="editform.superpassword" autocomplete="off" ></el-input>
            </el-form-item>
            <el-form-item label="核心交換機ID" prop="switch_id" >
              <el-select v-model="editform.switch_id" placeholder="請選擇核心交換機ID">
                <el-option
                  v-for="item in switch_group"
                  :key="item.id"
                  :label="item.switch_ipaddr"
                  :value="item.id">
                  <span style="float: left">{{ item.switch_ipaddr }}</span>
                  <span style="float: right; color: #8492a6; font-size: 13px">{{ item.id }}</span>
                </el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="狀態" prop="is_enabled">
              <el-switch
                v-model="editform.is_enabled"
                active-color="#13ce66"
                inactive-color="#ff4949">
              </el-switch>
            </el-form-item>
            <el-form-item label="備注" prop="comments">
              <el-input type="text" v-model="editform.comments" autocomplete="off" ></el-input>
            </el-form-item>
          </el-form>
            <div slot="footer" class="dialog-footer">
              <el-button type="primary" @click="submitForm('editform')">提交</el-button>
              <el-button @click="resetForm1('editform')">重置</el-button>
            </div>
          </template>

        </el-dialog>

  


免責聲明!

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



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