Axios使用Vue Multiselect进行选择/输入的调用

时间:2019-04-18 14:57:18

标签: javascript vue.js axios multi-select

我有一个正常运行的Vue Multiselect,在这里我使用axios调用来填充数据库值中的选项。这样效果很好,可以让我从现有选项中进行选择或输入新选项来创建标签。

按原样,这很完美。但是,我需要一种方法,如果可能的话,每次用户选择并选择或单击Enter键以保存标签选项时,都将再次拨打Axios。有办法吗?

这是我第一次使用Vue,我不确定这是否可行,但基本上我只是想知道每次选择标签或使用Enter键输入标签时如何进行axios呼叫

<div id="tagApp">
  <multiselect
  label="tag_data"
  track-by="campaign_tag_id"
  v-model="value"
  :options="options"
  :multiple="true"
  :taggable="true"
  @tag="addTag"
  @search-change="val => read(val)"
  :preselect-first="false"
  :close-on-select="false" 
  :clear-on-select="true" 
  :preserve-search="true" 
  tag-placeholder="Add this as new tag" 
  placeholder="Search or add a tag"
  ></multiselect>
</div>

new Vue({
      components: {
        Multiselect: window.VueMultiselect.default
      },
      el: "#tagApp",
      data() {
        return{
            value: [],
            loading: false,
            options: []
        }

      },
      methods: {
        read: function(val){
            //console.log('searched for', val);
          if (val) {
            this.loading = true;
            this.options = [];

            const self = this;
            console.log(val);

            axios.get('campaigns/search',{params: {query: val}})
                .then(function (response) {
                    self.options = response.data;
                    console.log(response.data);
            });

          } else {
            this.options = [];
          }
        },
        addTag(newTag) {
          const tag = {
            tag_data: newTag,
          };
          this.options.push(tag);
          this.value.push(tag);
        }
      }
    })

1 个答案:

答案 0 :(得分:1)

监视@select事件并触发将发生Axios调用的函数。

<div id="tagApp">
  <multiselect
  ...
  @select= "callAxios"
  ...
  ></multiselect>
</div>
...

   methods: {
        callAxios: function(val){
            //your Axios call here
        },
        ...
   }

...