如下代码片断,使用onMounted
或是watch
给表单input赋值都无效,直接用projectStore.currentProject
可以显示。
问题出在哪里?
原因已经找到,在下面
1.dialog 片断:
<el-dialog :title="titleServerList" v-model="openServerList" width="800px" append-to-body>
<el-form ref="serverdetailRef" :model="dataServerList.formServerList" :rules="rulesServerList" label-width="180px">
<el-form-item label="项目ID" prop="projecId">
<el-input v-model="formServerList.projecId" disabled/>
</el-form-item>
// ... ...
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitFormServerList">确 定</el-button>
<el-button @click="cancelServerList">取 消</el-button>
</div>
</template>
</el-dialog>
- dataServerList 片断:
const dataServerList = reactive({
formServerList: {
projecId: null,
}
});
const { formServerList } = toRefs(dataServerList);
- 赋值片断:
watch(
() => projectStore.currentProject,
(newVal) => {
console.log('Watch 监听:', newVal) //打印成功取到值
formServerList.projecId = newVal;
//dataServerList.formServerList.projecId = newVal; // 直接修改响应式对象也不行
},
{ immediate: true }
)
或者用
onMounted(() => {
formServerList.projecId = projectStore.currentProject
})
- 直接用store赋值可以 ( projectStore.currentProject):
<el-dialog :title="titleServerList" v-model="openServerList" width="800px" append-to-body>
<el-form ref="serverdetailRef" :model="dataServerList.formServerList" :rules="rulesServerList" label-width="180px">
<el-form-item label="项目ID" prop="projecId">
<el-input v-model="projectStore.currentProject" disabled/>
</el-form-item>
问题的原因是在执行打开弹窗函数时,进行了表单重置,
watch
赋的值被清空了。避免清空
或是清空后再赋值
都可以,如下: