我在我的应用程序中使用vue.js(v2.6.14)和vue-Multiselect(v2.1.6).

我在通过单击sibling 元素input[type='checkbox']来更改multiselect组件内的数据时遇到了问题.

components: {
  Multiselect
},
data() {
 residence: {
  name: 'Not selected'
 },
 residenceOptions: [
  { name: 'Not selected' },
  { name: 'Albania' },
  { name: 'Algeria' },
  ...
  { name: 'United Arab Emirates'}
 ]
}
<multiselect
 v-model='residence'
 :options='residenceOptions'
 label='name'
 placeholder='Residence'
 track-by='name'>
    <template slot='singleLabel' slot-scope='{ option }'>
       <strong>{{ option.name }}</strong>
    </template>
</multiselect>

<div class='form__checkbox'>
 <input
  id='quotationForm-resident'
  class='form__input'
  name='residence'
  type='checkbox'
  placeholder=''
  :checked='residence && residence.name === "United Arab Emirates"'
  @click='residence.name = "United Arab Emirates"'
/>

此代码中的What I expected:通过单击该复选框,所选值(多选组件中的数据指针)将有所不同(一个值对应于名称为"阿拉伯联合酋长国"的元素).

What I got:多选不会更改列表中的选定元素,而只是使用值"阿拉伯联合酋长国"重写选定元素的每个名称属性.

我希望我能正确地描述那个问题????

推荐答案

try 使用@select:value,而不是v-model:

new Vue({
  el: '#demo',
  components: { Multiselect: window.VueMultiselect.default },
  data() {
    return {
      residence: {
        name: 'Not selected'
      },
      residenceOptions: [
        { name: 'Not selected' },
        { name: 'Albania' },
        { name: 'Algeria' },
        { name: 'United Arab Emirates'}
      ]
    }
  },
  methods: {
    uae() {
      this.residence.name = 
        this.residence.name !== 'United Arab Emirates' ?
          'United Arab Emirates' :
          'Not selected'
    },
    onSelect(option) {
      this.residence.name = option.name
    }
  }
})
<script src="https://unpkg.com/vue-multiselect@2.1.0"></script>
  <link rel="stylesheet" href="https://unpkg.com/vue-multiselect@2.1.0/dist/vue-multiselect.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="demo">
  <div>
    <multiselect
       :value='residence'
       :options='residenceOptions'
       label='name'
       placeholder='Residence'
       @select="onSelect"
    >
        <template slot='singleLabel' slot-scope='{ option }'>
           <strong>{{ option.name }}</strong>
        </template>
      </multiselect>
      {{residenceOptions}}
      <b>{{residence}}</b>
      <div class='form__checkbox'>
       <input
        id='quotationForm-resident'
        class='form__input'
        name='residence'
        type='checkbox'
        placeholder=''
        :checked='residence && residence.name === "United Arab Emirates"'
        @click='uae'
      />
  </div>
</div>

Javascript相关问答推荐

在vercel throws上部署带有gunjs的sveltekit应用无法找到模块./' lib/文本编码'

使用i18next在React中不重新加载翻译动态数据的问题

为什么ngModel不能在最后一个版本的Angular 17上工作?'

变量的值在Reaction组件中的Try-Catch语句之外丢失

如何通过将实例方法的名称传递给具有正确类型的参数的继承方法来调用实例方法?

将核心模块导入另一个组件模块时存在多个主题

使每个<;li>;元素的 colored颜色 与随机生成的 colored颜色 列表不同(不重复

为列表中的项目设置动画

处理TypeScrip Vue组件未初始化的react 对象

为什么在运行于<;img>;事件处理程序中的JavaScript中x和y是不可变的?

未捕获的不变违规:即使在使用DndProvider之后也应使用拖放上下文

在没有任何悬停或其他触发的情况下连续交换图像

调用特定数组索引时,为什么类型脚本不判断未定义

对不同目录中的Angular material 表列进行排序

在Press Reaction本机和EXPO av上播放单个文件

如何在加载页面时使锚定标记成为焦点

输入数据覆盖JSON文件

如何使pdf.js上的文本呈现为可选?

在不使用AJAX的情况下将JavaScript数组值传递给Laravel控制器?

如何在底部重叠多个div?