v-on: изменение не работает для vue-multiselect

Я использую компонент vue-multiselect в своем проекте vue.js, я использую директиву 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" но это тоже не сработало..

2 ответа

Решение

@click не будет вызывать метод executeLoader с Vue Multiselect. Ты можешь использовать @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"

В vue-multiselect, поскольку это компонент, к нему нельзя относиться как к простому <select> элемент.

В компонентах, когда вы ожидаете, что они будут вести себя и "прислушиваются" к событиям щелчка, как и к другим HTML-тегам, вы должны добавить модификатор событий с именем: .native,

Итак, вы можете сделать на любом компоненте:

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

Но это не то, что вы ищете, я думаю. Вы хотите запускать функцию, когда добавляете все больше и больше тегов или, если коротко, когда количество выбранных элементов увеличивается.

для этого vue-multiselect выставляет @input событие, так что вы можете обрабатывать с помощью:

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

А теперь просто позвоните executeLoader и принять аргументы как:

methods: {
  executeLoader(selectedItems) {} 
}
Другие вопросы по тегам