0

要求:我有可搜索的下拉菜单,最初我不会有任何下拉项目,但是一旦用户输入一个字母,我希望调用一个 API,它会给我一个以该字母开头的下拉项目列表(例如,键入“A”应该返回“苹果”、“蚂蚁”等)。

简而言之:我需要一个带有下拉菜单的输入字段(类似于 Google 的搜索)。

我找到了一个 npm 包:https ://www.npmjs.com/package/vue-multiselect

当给定已经初始化的下拉项目时,这工作正常。

<multiselect
  v-model="valueabc"
  :options="websites"
  label="url"
  track-by="url"
  class="header-select mr-3"></multiselect>

我想用从 API 结果填充的值的结果填充选项,但我找不到要在 keyup 上触发的事件。

试过:v-on:keyup.enter="eventname"@keydown="eventname"

<multiselect ... v-on:keyup.enter="eventname"></multiselect>

<multiselect ... @keydown="eventname"></multiselect>

恐怕这不能使用这个包来实现。

4

1 回答 1

2

vue-multiselect确实具有异步填充项目的能力(例如,用于 ajax 加载),无需重新发明轮子。在此处阅读文档。

简而言之,您可以这样做:

<multiselect
  v-model="valueabc"
  :options="websites"
  label="url"
  track-by="url"
  class="header-select mr-3"
  :searchable="true"
  :internal-search="false"
  :loading="isLoading"
  :clear-on-select="false"
  :show-no-results="false"
  @search-change="searchWebsites"
/>
export default {
  data() {
    return {
      websites: [],
      isLoading: false,
    };
  },
  methods: {
    async searchWebsites(query) {
      this.isLoading = true;
      // make API request to load websites
      this.websites = await loadWebsites(query);
      this.isLoading = false;
    },
  },
};

不过,您应该调整此示例以满足您的需求。

于 2020-09-22T07:47:58.830 回答