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

Vue3+Vuetify3+Pinia:优化数组对象取值及Pinia getter传参问询

优化方案:根据选中学年动态获取公交线路列表(Vue3/Vuetify3/Pinia)

一、用Pinia带参Getter实现(推荐)

Pinia的getter支持返回函数来接收参数,刚好适配你根据学年动态获取线路列表的需求。修改你的Store如下:

import { defineStore } from 'pinia'

export const useRouteStore = defineStore('routeStore', {
    state: () => ({
        routes: [
            {schoolyear: "2022-2023", routeList: ["L-K311", "L-K312", "L-K325", "L-K326", "L-K336"]},
            {schoolyear: "2023-2024", routeList: ["C-K311", "C-K312", "C-K325", "C-K326", "C-K336"]},
            {schoolyear: "2024-2025", routeList: ["N-K311", "N-K312", "N-K325", "N-K326", "N-K336"]},
        ]
    }),
    getters: {
        // 返回函数接收学年参数,返回对应线路列表
        getRoutesByYear: (state) => (schoolYear) => {
            const routeItem = state.routes.find(item => item.schoolyear === schoolYear)
            return routeItem ? routeItem.routeList : []
        }
    }
})

二、组件内的简化实现

1. 使用Pinia Getter的组件代码

在组件中直接调用getter函数,传入选中的学年即可:

<template>
  <v-select
    v-model="selectedSchoolYear"
    :items="schoolYears"
    label="选择学年"
  ></v-select>

  <v-select
    :items="routeStore.getRoutesByYear(selectedSchoolYear)"
    label="选择公交线路"
    :disabled="!selectedSchoolYear"
  ></v-select>
</template>

<script setup>
import { useRouteStore } from '@/stores/RouteStore'
import { computed, ref } from 'vue'

const routeStore = useRouteStore()
const selectedSchoolYear = ref('')

// 提取所有学年作为第一个选择器的选项(可选,也可直接写死)
const schoolYears = computed(() => {
  return routeStore.routes.map(item => item.schoolyear)
})
</script>

2. 组件内函数的简化(不使用Getter的情况)

如果你不想用Getter,也可以用数组find方法简化原函数,同时注意**

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:29:55