autocomplete.vue 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <template>
  2. <el-row class="demo-autocomplete text-center">
  3. <el-col :span="12">
  4. <div class="sub-title my-2 text-sm text-gray-600">
  5. list suggestions when activated
  6. </div>
  7. <el-autocomplete
  8. v-model="state1"
  9. :fetch-suggestions="querySearch"
  10. class="inline-input"
  11. placeholder="Please Input"
  12. @select="handleSelect"
  13. />
  14. </el-col>
  15. <el-col :span="12">
  16. <div class="sub-title my-2 text-sm text-gray-600">
  17. list suggestions on input
  18. </div>
  19. <el-autocomplete
  20. v-model="state2"
  21. :fetch-suggestions="querySearch"
  22. :trigger-on-focus="false"
  23. class="inline-input"
  24. placeholder="Please Input"
  25. @select="handleSelect"
  26. />
  27. </el-col>
  28. </el-row>
  29. </template>
  30. <script setup lang="ts">
  31. import { ref } from 'vue'
  32. interface RestaurantItem {
  33. value: string
  34. link: string
  35. }
  36. const state1 = ref('')
  37. const state2 = ref('')
  38. const restaurants = ref<RestaurantItem[]>([])
  39. const querySearch = (queryString: string, cb: any) => {
  40. const results = queryString
  41. ? restaurants.value.filter(createFilter(queryString))
  42. : restaurants.value
  43. // call callback function to return suggestions
  44. cb(results)
  45. }
  46. const createFilter = (queryString: string) => {
  47. return (restaurant: RestaurantItem) => {
  48. return (
  49. restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0
  50. )
  51. }
  52. }
  53. const handleSelect = () => {
  54. //
  55. }
  56. </script>