vue2.x组件内嵌套组件,类似于select和option

这里简单讲解下类似于
在这里插入图片描述
这种组件的封装,其使用代码如下
Option可用v-for循环即可达到效果

	<Select v-model="search">
	  <Option :label="x" :value="xx" />
	</Select>

这里只讲讲值的同步,具体的样式这些自己想办法
**1.**引入select和option组合

<template>
  <div class="ul">
    <Select v-model="seacher" v-if="isShow">
      <Option :value="v" :label="l" />
    </Select>
    <input
      type="text"
      readonly
      v-model="seacher"
      @click="isShow = !isShow"
      placeholder="choose"/>
  </div>
</template>

<script>
import Select from "./select.vue";
import Option from "./option.vue";
export default {
  components: {
    Select,
    Option
  },
  provide () {
    return {
      setShow: this.show
    }
  },
  data() {
    return {
      v: "1",
      isShow: false,
      l: "3333333",
      seacher: ""
    };
  },
  methods: {
    show () {
      this.isShow = false
    }
  }
};
</script>

<style scoped></style>

**2.**select.vue

<template>
  <div class="sl">
    <slot />
    <div>
      {{setChooses}}
    </div>
  </div>
</template>

<script>
export default {
  provide() {
    return {
      setChoos: this.look
    };
  },
  props: {
    value: String
  },
  data() {
    return {
      setChooses: this.value
    };
  },
  // watch: {	这里的watch没起作用所以我直接下面的look中修改
  //   setChooses(newVal) {
  //     this.$emit("input", newVal);
  //   }
  // },
  methods: {
    look(e) {
      this.setChooses = e;
      this.$emit("input", e);
    }
  }
};
</script>

<style scoped></style>

3.option.vue

<template>
  <div class="op">
    <span @click="change" class="opt">{{ label }}</span>
  </div>
</template>

<script>
export default {
  inject: ["setChoos", "setShow"],
  props: {
    label: {
      type: String
    },
    value: String
  },
  methods: {
    change() {
      this.setChoos(this.value);
      this.setShow()
    }
  }
};
</script>

<style scoped>
.opt {
  cursor: pointer;
}
</style>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Vue 3和Ant Design中使用Select组件实现可输入、可选择、输入之后筛选模糊搜索的功能,可以结合Ant Design的AutoComplete组件Select组件来实现。 首先,确保你已经安装了Vue 3和Ant Design,并正确引入它们。 然后,创建一个名为"FuzzySearchSelect"的组件,并在template部分编写组件的结构和样式。在data中定义一个空数组来存储搜索结果。在methods中定义一个方法来处理输入框的搜索操作。 ```vue <template> <a-select v-model:value="selectedValue" mode="tags" :filter-option="false"> <a-auto-complete v-model:value="inputValue" :options="filteredOptions" @search="handleSearch" placeholder="请输入搜索内容" ></a-auto-complete> </a-select> </template> <script> import { ref, computed } from 'vue'; import { Select, AutoComplete } from 'ant-design-vue'; export default { components: { 'a-select': Select, 'a-auto-complete': AutoComplete, }, data() { return { inputValue: '', selectedValue: [], options: [], // 所有选项 }; }, computed: { filteredOptions() { return this.options.filter(option => option.toLowerCase().includes(this.inputValue.toLowerCase()) ); }, }, methods: { handleSearch(value) { // 模拟异步请求获取选项数据 setTimeout(() => { this.options = ["选项1", "选项2", "选项3", "选项4"]; }, 1000); }, }, }; </script> ``` 在这个示例中,我们使用了Ant Design的Select和AutoComplete组件来实现可输入、可选择和模糊搜索的功能。组件中包含一个Select组件,使用v-model:value绑定选择的值,并设置mode为"tags"以支持可输入的标签模式。在Select组件内部,嵌套了一个AutoComplete组件,用于实现输入框的自动补全和模糊搜索。在AutoComplete组件中,我们使用v-model:value绑定输入框的值,通过@search事件监听输入框的搜索操作,并调用handleSearch方法进行搜索。 在handleSearch方法中,我们可以根据实际需求进行异步请求获取选项数据,并将数据赋值给options数组。filteredOptions计算属性根据输入框的值对options进行模糊匹配,返回匹配结果供选择。 希望这个示例能够帮助你实现你的需求!如果有任何问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值