You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实例化Vue扩展组件时如何修改基组件的data值?

解决方案

你的问题核心是Vue组件的内部data无法直接通过父组件的属性绑定修改,必须通过props来实现外部传值。下面提供两种可行方案:

方案一:将Block的data改为props(推荐)

直接把Block里的内部状态data定义为props,这样父组件可以直接传递值,ToggleBlock继承后自动拥有这个props:

修改Block组件代码:

<script lang="ts">
import { defineComponent } from 'vue';

export default defineComponent({
  // 定义props接收外部传入的值
  props: {
    data: {
      type: String,
      default: "hello" // 设置默认值,保持原有默认行为
    }
  },
  data() {
    return {
      comment: null
    }
  }
});
</script>

<template>
  <h1>{{ data }}</h1>
</template>

然后在其他模板中实例化ToggleBlock时,直接用:data传递值即可:

<ToggleBlock :data="blocks_data.new_data"></ToggleBlock>

方案二:保留Block内部data,通过props传递初始值

如果不想修改Block的data定义,可新增一个props用于传递初始值,再用它初始化内部data:

修改Block组件代码:

<script lang="ts">
import { defineComponent } from 'vue';

export default defineComponent({
  props: {
    initialData: {
      type: String,
      default: "hello" // 默认值仍为原"hello"
    }
  },
  data() {
    return {
      // 用props的值初始化内部data
      data: this.initialData,
      comment: null
    }
  }
});
</script>

<template>
  <h1>{{ data }}</h1>
</template>

实例化ToggleBlock时,传递initial-data(Vue会自动转换为驼峰式initialData):

<ToggleBlock :initial-data="blocks_data.new_data"></ToggleBlock>

额外修正:ToggleBlock的模板语法错误

你的ToggleBlock模板里的<input>标签未闭合,需要补上/>:

<template>
  <div>
    <span>
      <h1>{{ data }}</h1>
      <input type="checkbox" id="checkbox" v-model="toggled" />
    </span>
  </div>
</template>

内容的提问来源于stack exchange,提问作者sam_s3piol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 22:10:28