element-plus input组件+select组件实现输入加选择

需求

用户输入数值,再选择下拉项,进行相应数据的筛选查询
在这里插入图片描述

组件select-input

<template>
  <div>
    <el-input v-model="inputData" placeholder=" " clearable @clear="clear">
      <template #append>
        <el-select v-model="selectData" placeholder=" " @change="change">
          <el-option
            v-for="(item, index) in option"
            :key="index"
            :label="item.label"
            :value="item.value"
          ></el-option>
        </el-select>
      </template>
    </el-input>
  </div>
</template>

<script>
export default {
  props: {
    option: {
      type: Array,
      default: [
        {
          label: "大于",
          value: "大于",
        },
        {
          label: "小于",
          value: "小于",
        },
        {
          label: "等于",
          value: "等于",
        },
      ],
    },
    input: {
      type: String,
      default: "",
    },
    select: {
      type: String,
      default: "",
    },
  },
  data() {
    return {
      selectData: "",
      inputData: "",
    }
  },
  watch: {
    input: {
      handler(val) {
        this.inputData = val
      },
      immediate: true,
      deep: true,
    },
    selectData: {
      handler(val) {
        this.selectData = val
      },
      immediate: true,
      deep: true,
    },
  },
  methods: {
    change() {
      this.$emit("update:input", this.inputData)
      this.$emit("update:select", this.selectData)
      this.$emit("change", this.inputData, this.selectData)
    },
    clear() {
      this.$emit("update:input", "")
      this.$emit("update:select", "")
      this.$emit("change", "", "")
    },
  },
}
</script>
<style lang="scss" scoped>
:deep(.el-select) {
  height: 100%;
  .el-input__inner {
    display: none;
  }
  .el-tooltip__trigger {
    height: 100%;
  }
  .el-input__wrapper {
    height: 100%;
  }
  .el-input--suffix {
    height: 100%;
  }
  .el-input__suffix-inner > :first-child {
    margin-left: 0;
  }
}
:deep(.el-input) {
  .el-input-group__append {
    padding: 0 !important;
    .el-select {
      margin: 0 !important;
    }
  }
}
</style>

使用

<select-input v-model:input="input" v-model:select="select" @change="change"></select-input>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Element Plus 是一个基于 Vue.js 的 UI 组件库,它提供了一系列的组件和工具,帮助开发者构建现代化的 Web 应用程序。在 Element Plus 中,可以使用 input 组件的联想功能来实现输入框的自动补全和联想提示。 要使用 input 组件的联想功能,首先需要在你的 Vue.js 项目中引入 Element Plus。然后,在需要使用的页面或组件中,可以直接使用 Element Plus 提供的 input 组件,并通过配置参数来启用联想功能。 以下是一个示例代码,演示了如何在 Element Plus 中使用 input 组件的联想功能: ``` vue <template> <div> <el-input v-model="inputValue" placeholder="请输入内容" :fetch-suggestions="fetchSuggestions" @select="handleSelect" ></el-input> </div> </template> <script> export default { data() { return { inputValue: '', suggestions: ['联想1', '联想2', '联想3'] // 联想提示列表数据 }; }, methods: { fetchSuggestions(queryString, callback) { // 根据输入内容进行异步数据请求,获取联想提示列表 // 然后通过 callback 将联想结果返回给 input 组件 // 示例中直接使用本地数据作为联想提示列表 callback(this.suggestions.filter(item => item.toLowerCase().indexOf(queryString.toLowerCase()) !== -1 )); }, handleSelect(item) { // 处理选中联想项的逻辑 console.log('选中了:', item); } } }; </script> ``` 在上面的示例中,通过配置 `fetch-suggestions` 属性来指定一个异步方法,该方法将根据输入内容进行数据请求,并将联想结果通过回调函数返回给 input 组件。同时,通过 `@select` 事件来监听用户选中联想项的操作。 请注意,上述示例仅为演示如何使用 Element Plus 的 input 组件的联想功能,实际使用时需要根据你的需求进行适当的修改和调整。更详细的使用文档可以参考 Element Plus 官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值