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

不使用事件总线,如何在Vue项目中实时获取下拉列表的选中值

解决方案

核心思路是遵循单向数据流规范,将下拉选中值通过参数传递给业务逻辑层,完全避免跨层操作DOM获取值。

1. 改造下拉组件dropdownlist.vue,支持值绑定与变化事件抛出

<template>
    <div>
        <select v-model="selectedMode" @change="handleOnChange">
            <option value="1" selected>one</option>
            <option value="2">two</option>
            <option value="3">three</option>
        </select>
    </div>
</template>
<script>
export default {
    name: 'DropDownList',
    data() {
        return {
            selectedMode: '1'
        }
    },
    // 支持父组件通过v-model双向绑定选中值
    model: {
        prop: 'value',
        event: 'change'
    },
    props: {
        value: String
    },
    watch: {
        value(val) {
            this.selectedMode = val
        }
    },
    methods: {
        handleOnChange() {
            this.$emit('change', this.selectedMode)
        }
    }
}
</script>

2. 父组件存储选中值,调用业务方法时作为参数传入

在使用下拉组件的父组件中绑定选中值,需要调用firestore.dao.js的查询方法时,直接将存储的最新值作为参数传递即可:

<template>
    <div>
        <drop-down-list v-model="currentMode" />
        <button @click="getPostList">触发查询</button>
    </div>
</template>
<script>
import DropDownList from './dropdownlist.vue'
import { selectPosts } from './firestore.dao.js'
export default {
    components: { DropDownList },
    data() {
        return {
            currentMode: '1'
        }
    },
    methods: {
        async getPostList() {
            // 直接将最新选中值传入业务方法
            const res = await selectPosts(this.currentMode)
            // 后续业务处理逻辑
        }
    }
}
</script>

3. 调整业务层方法selectPosts,接收参数使用

删除firestore.dao.js中原有的DOM查询逻辑,改为接收入参使用:

export async function selectPosts(mode) {
    console.log('abcd: ' + mode)
    // 原有查询逻辑直接使用传入的mode参数即可
}

原有写法问题说明

之前直接在业务层通过document.getElementById拿值存在多个隐患:如果页面渲染了多个ID为jsmode的下拉实例,只会返回第一个渲染实例的默认值;如果调用业务方法时组件DOM未完成更新,也会拿到旧值。改用参数传递的方式完全规避了DOM操作依赖,也符合给出的开发建议。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:06:09