问题描述:第一次点击弹框时,数据正常回显。关闭弹框后再次打开,数据是正确的,但是组件显示有问题。
前端代码:
<el-form-item label="推送时间" prop="subscribeCycle" v-if="subscribeForm.subscribeStatus">
<el-radio-group v-model="subscribeForm.subscribeCycle">
<el-radio-button :label="1">每日推送</el-radio-button>
<el-radio-button :label="2">每周推送</el-radio-button>
<el-radio-button :label="3">每月推送</el-radio-button>
</el-radio-group>
<div class="mt-4">
<!-- 每周 -->
<el-select v-model="subscribeForm.subscribeDate" style="width: 100px; margin-right: 6px"
v-if="subscribeForm.subscribeCycle == 2">
<el-option v-for="(item, index) in weekList"
:key="item+index+1"
:value="index+1"
:label="item"></el-option>
</el-select>
<!-- 每月 -->
<el-select v-model="subscribeForm.subscribeDate" style="width: 100px; margin-right: 6px"
v-if="subscribeForm.subscribeCycle == 3">
<el-option v-for="index of 31"
:key="index"
:value="index"
:label="'每月'+index+'日'"></el-option>
</el-select>
<el-time-select :clearable="false" :editable="false"
v-model="subscribeForm.subscribeTime"
:picker-options="{
start: '10:30',
step: '00:30',
end: '24:00'
}"
placeholder="请选择时间">
</el-time-select>
</div>
</el-form-item>
解决方法:由上图可见下拉框能显示正确数据,是数据响应到了,但是文本框采用了就地复用原则,没有重新渲染dom导致,所以只要给el-form-item加上key就行了。
<el-form-item label="推送时间"
prop="subscribeCycle"
v-if="subscribeForm.subscribeStatus"
:key="subscribeForm.subscribeTime">