Vue 下拉框获取数据

本文介绍如何在Vue中创建一个下拉框组件,实现从数据库获取数据的功能,不依赖路由器。通过组件化思维,抽离响应数据,使组件更便捷。适用于静态数据相同的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Vue 使用数据网上很多方法都需要使用到路由器
但是我不太会,于是自己写了一个小组件也可以起到获取数据库数据并返回到 Vue 下拉框的作用

<template>
  <div class="demo">

    <el-select v-model="queryParams"  @change="selectPlatform($event)">
      <el-option  v-for="(item,index) in timeList" :key="index" :value='item.buyType' :label='item.queryParams'>{{item.buyType}}</el-option>
    </el-select>


  </div>
</template>
<script>
import {listTime} from "@/api/SepiMade/ATime/time";

export default {
  created() {
    this.getList()
  },
  data() {
    return {
      value: '',
      selectObj: {}, //选中数据
      timeList: [],
      array: [],
      queryParams: {
        pageNum: 1,
        pageSize: null,
        openDate: null,
        applyDate: null,
        bidDate: null,
        downloadFileDate: null,
        queryFileDate: null,
        openAddress: null,
        editor: null,
        tag: null,
        name: null,
        num: null,
        nuit: null,
        nuitPrice: null,
        price: null,
        content: null,
        contractNo: null,
        contractName: null,
        planNumber: null,
        planName: null,
        projectNumber: null,
        projectName: null,
        buyType: null,
        budget: null,
      },
    }
  },
  methods: {
    selectPlatform(event){
      this.$forceUpdate()//强制更新
      this.value = this.queryParams
      console.log(this.queryParams)
      console.log("value ==="+this.value)
    },
    getList() {
      console.log("TEST 组件触发完成")
      listTime(this.queryParams).then(response => {
        // console.log(response.rows)
        this.timeList = response.rows;

        console.log("TEST[1] 的 buyType 为: "+this.timeList[1].buyType)

        let newFilArr = this.timeList.filter( (item,i) =>{
          console.log("循环==i==",i);
          return item >= this.timeList.length
        })
      });
    },
  }
}
</script>

对于需要下拉相同的 state 来说,你只需要一个初始化的 getList 即可
在这里插入图片描述
在这里插入图片描述
你可以在控制台打印你的 select 选择值

当然我们也可以使用组件化的思想将这个组件变得更为方便

抽离出 response 的数据使用父组件传入,修改后的组件为
<template>
  <div class="demo">

    <el-select v-model="queryParams"  @change="selectPlatform($event)">
      <el-option  v-for="(item,index) in timeList" :key="index" :value='item.buyType' :label='item.queryParams'>{{item.buyType}}</el-option>
    </el-select>


  </div>
</template>
<script>
import {listTime} from "@/api/SepiMade/ATime/time";

export default {
  created() {
    this.getList()
  },
  data() {
    return {
      value: '',
      selectObj: {}, //选中数据
      timeList: [],
      array: [],
      queryParams: {
        pageNum: 1,
        pageSize: null,
        openDate: null,
        applyDate: null,
        bidDate: null,
        downloadFileDate: null,
        queryFileDate: null,
        openAddress: null,
        editor: null,
        tag: null,
        name: null,
        num: null,
        nuit: null,
        nuitPrice: null,
        price: null,
        content: null,
        contractNo: null,
        contractName: null,
        planNumber: null,
        planName: null,
        projectNumber: null,
        projectName: null,
        buyType: null,
        budget: null,
      },
    }
  },
  methods: {
    selectPlatform(event){
      this.$forceUpdate()//强制更新
      this.value = this.queryParams
      console.log(this.queryParams)
      console.log("value ==="+this.value)
    },
    getList(data) {
      console.log("TEST 组件触发完成")
        this.timeList = data;
    },
  }
}
</script>

        this.$refs.formdata.getList(this.timeList)
        > 父组件的 getList() 中
        <test ref="formdata"/>
        > 向子组件中传 response

我们需要在父组件中传入我们需要的数据,当然这种情况只能用于静态数据相同的情况下,
感觉作用不大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值