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

Vue.js中BootstrapVue Form Select触发change事件赋值异常问题

问题核心原因

你当前的单文件组件写法存在错误,在<script>中直接通过new Vue()实例化了独立的Vue对象,而非导出组件配置对象,导致你赋值的pdServiceKey属于手动创建的vm实例,和当前渲染的组件实例完全无关,所以组件内读取的pdServiceKey自然是错误/未更新的。而控制台打印的是直接从pdServiceData查询到的原始正确值,不受实例逻辑影响,所以显示正常。

修复方案

  1. 修正单文件组件的导出写法,单文件组件不需要自行实例化Vue,导出配置对象即可,同时优化查询逻辑避免重复遍历数组:
<template>
  <b-card title="Select Service:" style="max-width: 30rem;">
    <div>
      <b-form-select v-model="pdServiceName"
                    class="mb"
                    size="sm"
                    :options="pdServiceNameList"
                    @change="setService">
        <template #first>
          <b-form-select-option :value="null" disabled>
            -- Please select a PD service --
          </b-form-select-option>
        </template>
      </b-form-select>
    </div>
  </b-card>
</template>

<script>
import pdServiceData from '@/service/pd/pdSrvcData';

export default {
  data() {
    return {
      pdServiceName: null,
      pdServiceKey: null,
    }
  },
  computed: {
    pdServiceNameList() {
      return pdServiceData.map(a => a.service)
    }
  },
  methods: {
    setService() {
      // 仅查询一次,同时加边界判断避免找不到匹配项时报错
      const matchedService = pdServiceData.find(x => x.service === this.pdServiceName)
      if (matchedService) {
        console.log(this.pdServiceName)
        console.log(matchedService.key)
        this.pdServiceKey = matchedService.key
      }
    },
  }
}
</script>
  1. 可选简化方案:直接让选择器绑定整个服务对象,无需额外查询匹配:
<template>
  <b-card title="Select Service:" style="max-width: 30rem;">
    <div>
      <b-form-select v-model="selectedService"
                    class="mb"
                    size="sm"
                    :options="pdServiceOptions"
                    @change="setService">
        <template #first>
          <b-form-select-option :value="null" disabled>
            -- Please select a PD service --
          </b-form-select-option>
        </template>
      </b-form-select>
    </div>
  </b-card>
</template>
<script>
import pdServiceData from '@/service/pd/pdSrvcData';

export default {
  data() {
    return {
      selectedService: null
    }
  },
  computed: {
    pdServiceOptions() {
      return pdServiceData.map(item => ({
        text: item.service,
        value: item
      }))
    }
  },
  methods: {
    setService() {
      if (this.selectedService) {
        console.log(this.selectedService.service, this.selectedService.key)
      }
    }
  }
}
</script>

补充排查点

如果修正写法后仍有问题,请检查pdServiceData是否存在service字段重复的条目,Array.find只会返回第一个匹配的元素,会导致后续相同service的条目返回的key不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:27:00