Vue3 子组件获取 v-model 值,如何获取?

作者站长头像
站长
· 阅读数 18

父组件代码

<el-form-item label="封面">
  <UploadImgCom v-model="form.imgs"></UploadImgCom>
</el-form-item>
const form = ref<ColumnModel>({});
columnServer.Ishow(id).then((res) => {
  form.value = res.data as ColumnModel;
});
其中 form.imgs 有值

子组件代码

<img v-if="imageUrl" :src="imageUrl" class="avatar" />
const emit = defineEmits(["update:modelValue"]);
const props = defineProps<{ modelValue: string | undefined }>();
const imageUrl = ref(props.modelValue);

问题:我在加载数据的时候,是异步加载,这里出现了,子组件里面,获取不到 form 的值。

注:感觉是我的 server 去异步请求接口,然后 form 没有更新到。因为我在编辑器,更新代码,然后项目自动重新加载,它又可以获取到参数。所以我在想是不是,异步赋值,子组件没有跟着更新的问题!

请问我要想子组件加载 v-model 里的值,我改怎么处理。

上面的方法可以在子主键额外添加一个watch 可以实现更新!

提问题补充

但是同样的代码,为什么我的下拉框就能实现自动选择,就是我的下拉框能正常获取到v-model的值,都在一个页面,form 都是用的同样的值

父组件:

vue:

<el-form-item label="上级栏目">
  <ColumnSidCom v-model="form.sid" placeholder="请选择栏目" :sid="0">/ColumnSidCom>
</el-form-item>

ts:

columnServer.Ishow(id).then((res) => {
  form.value = res.data as ColumnModel;
});

子组件:

vue:

<template>
  <el-select v-model="from" @change="change">
    <el-option
      v-for="item in column"
      :key="item.id"
      :label="item.title"
      :value="item.id"
    />
  </el-select>
</template>

ts:

import type { ColumnModel } from "@/model/column/ColumnModel";
import { ColumnServer } from "@/server/ColumnServer";
import { ref, defineEmits, defineProps } from "vue";
const props = defineProps<{ sid: number }>();
const emit = defineEmits(["update:modelValue"]);
const columnServer = new ColumnServer();
const from = ref();
const column = ref<ColumnModel[]>();
columnServer.getSid(props.sid).then((msg) => {
  column.value = msg.data as ColumnModel[];
});
const change = () => {
  emit("update:modelValue", from.value);
};
回复
1个回答
avatar
test
2024-07-11

也可以试一下computed

const emits  = defineEmits(['update:modelValue'])
const imageUrl = computed({
  get() {
      return props.modelValue.value
   }
  set(newValue){
     emits('update:modelValue', newValue)
  }
})
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容