父组件相关代码
html
<el-dialog v-if="dialogVisible" :title="dialogTitle" :width="`${dialogWidth}px`" :visible.sync="dialogVisible" :close-on-click-modal="false">
<component :is="dialogKey" :ref="dialogKey" :currentForm="dialogForm"></component>
<div slot="footer">
<el-button @click="handleDialogClose">取 消</el-button>
<el-button type="primary" @click="handleSubmit">确 定</el-button>
</div>
</el-dialog>
js
dialogForm: {
splitTime: dayjs().format('YYYY-MM-DD HH:mm:ss')
}
子组件
<el-form :model="currentForm" ref="currentForm" :rules="rules" label-width="120px">
<el-form-item label="预约分裂时间" prop="splitTime">
<el-date-picker
v-model="currentForm.splitTime"
type="datetime"
value-format='yyyy-MM-dd HH:mm:ss'
format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择预约分裂时间">
</el-date-picker>
</el-form-item>
</el-form>
复现步骤:
第一次打开弹框: 时间选择器显示的是当前时间
更改时间选择器的时间之后关闭弹框
第二次打开弹框,显示时间是之前弹框里面时间选择的时间,而不是当前时间?
:currentForm="dialogForm"
在父组件传入了dialogForm,在子组件更改了currentForm中的splitTime。也就是你修改了引用值。你下次打开传入的是已经修改了的dialogForm。
介绍两种方案:
1.传入深拷贝的dialogForm;
2.在每次打开弹框时初始化dialogForm;