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

Vue3父子组件如何捕获或同步props值?自定义datatable进度列传值问题

Vue3 自定义datatable组件动态传值及状态列扩展方案

核心实现逻辑

你需要使用Vue3的作用域插槽特性,完成data-table父组件向插槽内progress-bar组件的响应式数据传递,同时可通过修改columns配置动态添加状态列,完整操作步骤如下:


步骤1:修改自定义data-table组件的插槽定义

在你自行实现的data-table组件内部,找到progress-bar插槽的渲染位置,将已计算完成的progress_val作为插槽属性向外暴露:

<!-- data-table 组件内部模板代码 -->
<template>
  <!-- 其他表格逻辑省略 -->
  <tr v-for="row in rows" :key="row.id">
    <td v-for="col in columns" :key="col.field">
      <!-- 如果列配置指定了插槽,则渲染对应插槽并传递数据 -->
      <slot 
        v-if="col.slot" 
        :name="col.slot" 
        :progress_val="progress_val" 
        :row="row" <!-- 可额外传递当前行数据,方便按行计算进度 -->
      ></slot>
      <span v-else>{{ row[col.field] }}</span>
    </td>
  </tr>
</template>

说明:如果你的progress_val是按行维度计算的,直接把对应行的进度值绑定到插槽属性即可,无需全局传值


步骤2:修改调用侧代码接收插槽数据

调整你贴出的调用代码,在插槽声明处接收data-table传递的属性:

<data-table
  :rows="state.rows"
  :columns="state.columns"
  :num_to_show="state.num_to_show"
  styleClass="tableOne vgt-table"
> 
  <!-- 解构接收作用域插槽传递的progress_val -->
  <template #progress-bar="{ progress_val }">
    <progress-bar :progress="progress_val"></progress-bar>
  </template> 
</data-table>

步骤3:动态添加状态列

直接修改响应式的state.columns数组,即可动态插入进度状态列:

// Vue3 脚本部分示例
import { reactive } from 'vue'

const state = reactive({
  rows: [],
  columns: [
    // 原有列配置省略
  ],
  num_to_show: 10
})

// 需要添加状态列时直接操作columns数组即可
const addStatusColumn = () => {
  state.columns.push({
    label: '处理状态',
    field: 'progress',
    slot: 'progress-bar', // 和你定义的插槽名对应
    width: '180px'
  })
}

说明:只要你的progress_val是用ref/reactive定义的响应式数据,更新后插槽内的progress-bar组件会自动接收最新值,无需额外监听


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:06:04