5

我在我的 vue.js 项目中使用 vue-multiselect 组件,我正在使用 v-on 指令在更改事件上执行一个函数,

<multiselect v-model="selected" :options="projects" :searchable="false" :custom-label="customLabel" track-by="name" v-on:change="executeLoader">
<template slot="customLabel" slot-scope="{ customLabel }"><strong>{{ option.name }}</strong></template>   
</multiselect>

我在这里有示例完整代码:https ://codesandbox.io/s/yjjon0vzxj

正在v-on:change使用<select>组件,但它停止使用 vue-multiselect 工作!我试过了,v-on:click="executeLoader"但这也没有奏效..

4

2 回答 2

14

@click不会触发executeLoader带有 vue 多选的方法。您可以使用@input- 类似于v-on:change, @close@select如下例所示:

<multiselect placeholder="Pick at least one" select-label="Enter doesn’t work here!" :value="value" :options="options" :multiple="true" :searchable="true" :allow-empty="false" :hide-selected="true" :max-height="150" :max="3" :disabled="isDisabled" :block-keys="['Tab', 'Enter']" @input="onChange" @close="onTouch" @select="onSelect"></multiselect>

在你的情况下,我会尝试@input="executeLoader"

于 2018-03-30T04:07:23.457 回答
0

在 vue-multiselect 中,由于它是一个组件,因此您不能将其视为一个简单的<select>元素。

在组件中,当您希望它们像其他 html 标记一样表现并“监听”单击事件时,您应该添加一个名为:的事件修饰符 .native

因此,您可以对任何组件执行以下操作:

<... @click.native="executeLoader" />

但我认为这不是你要找的。You want to trigger a function when you add more and more tags, or in short: when the selected items increase.

为此,vue-multiselect 公开了@input事件,因此您可以使用:

<... @input="executeLoader" />

现在只需调用executeLoader并接受参数:

methods: {
  executeLoader(selectedItems) {} 
}
于 2018-03-30T04:09:54.387 回答