Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

autoComplete.vue 1.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <template>
  2. <div class="autocomplete">
  3. <input type="text" v-model="search" @input="onChange" class="form-control" />
  4. <ul v-show="isOpen" class="autocomplete-results">
  5. <li
  6. v-for="(result, i) in results"
  7. :key="i"
  8. class="autocomplete-result"
  9. @click="setResult(result)"
  10. >
  11. {{ result }}
  12. </li>
  13. </ul>
  14. </div>
  15. </template>
  16. <script>
  17. export default {
  18. props: {
  19. items: {
  20. type: Array,
  21. required: false,
  22. default: () => [],
  23. },
  24. },
  25. data() {
  26. return {
  27. search: '',
  28. results: [],
  29. isOpen: false,
  30. };
  31. },
  32. methods: {
  33. onChange() {
  34. if (this.search.length >= 3) {
  35. this.isOpen = true;
  36. this.filterResults();
  37. } else {
  38. this.isOpen = false;
  39. }
  40. },
  41. filterResults() {
  42. this.results = this.items.filter(
  43. item => item.toLowerCase().indexOf(this.search.toLowerCase()) > -1,
  44. );
  45. },
  46. setResult(result) {
  47. this.search = result;
  48. this.isOpen = false;
  49. this.$emit('selection', this.search);
  50. },
  51. },
  52. };
  53. </script>
  54. <style>
  55. .autocomplete {
  56. position: relative;
  57. width: 130px;
  58. }
  59. .autocomplete-results {
  60. padding: 0;
  61. margin: 0;
  62. border: 1px solid #eeeeee;
  63. height: 120px;
  64. overflow: auto;
  65. }
  66. .autocomplete-result {
  67. list-style: none;
  68. text-align: left;
  69. padding: 4px 2px;
  70. cursor: pointer;
  71. }
  72. .autocomplete-result:hover {
  73. background-color: #60cbeb;
  74. color: white;
  75. }
  76. </style>