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

如何在Vue的<b-table>中创建按行独立的下拉框并保存每行选中值

问题根因

你当前所有行的下拉框都绑定了全局的同一个selectedSerial变量,所以任意一行修改值都会同步更新到所有下拉框。

解决方案

核心思路是将下拉框的选中值绑定到当前行对应的独立字段上,推荐直接存储在userIdArr的每一项对象内,管理更方便。

步骤1:初始化行数据时新增选中值字段

获取userIdArr数据时,给每一项新增selectedSerial字段存储当前行下拉框的选中值,保证响应式:

// 假设是接口请求返回userIdArr的场景
async fetchUserList() {
  const res = await request('/xxx')
  this.userIdArr = res.data.map(item => {
    // 给每行新增独立的选中值字段,初始值可自定义
    return { ...item, selectedSerial: '' }
  })
}
// 如果是Vue2且不方便解构赋值的话,也可以用$set添加响应式属性:
// this.userIdArr = res.data
// this.userIdArr.forEach(item => {
//   this.$set(item, 'selectedSerial', '')
// })

原来定义的全局变量selectedSerial: []已经没用了,可以直接删除。

步骤2:修改模板中的v-model绑定

将下拉框的v-model从全局变量改成绑定当前行的selectedSerial字段:

<b-row v-if="userIdArr.length >0 && incidentIdArr.length ===0" class="mt-5">
  <b-col md="10" offset-md="1">
    <b-table overflow="auto" hover border :items="userIdArr" :fields="userArrTblfields">
      <template slot="serialDropdown" slot-scope="row">
        <!-- 绑定当前行的独立字段 -->
        <b-form-select v-model="row.item.selectedSerial" :options="serialOptions"></b-form-select>
      </template> 
    </b-table>
  </b-col>
</b-row>

步骤3:收集所有行的选中值

后续需要提交数据时,直接遍历userIdArr即可获取每行的选中值:

// 示例:获取所有行的id和对应选中的serial
const submitData = this.userIdArr.map(item => {
  return {
    userId: item.id,
    selectedSerial: item.selectedSerial
  }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 09:15:08