問題細化一下是這樣的:
比如我有一個用來修改數據的表單,第一條數據是{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>