javascript - 如何在 VueJS 上使用 <slot v-for> 制作复选框列表?

标签 javascript vue.js v-for

我必须根据 data() 中的数组创建一个复选框列表。但我有两个问题。

1.我只能选择第一个复选框,当我点击其他复选框时,唯一更改的值是第一个复选框的列表。

2. 我无法获取 @change 函数,当我更改复选框的值时不会触发该函数。

<template>
...
<slot
  v-for="(termo, index) in termos"
  v-bind="termo"
  >
  <generic-check-box
    class="terms"
    input-id="termos[index].id"
    v-model="termos[index].term"
    :value="termos[index].term"
    @change="checkBoxChanged(index)"
    >
    <generic-text
      color="gray"
      class="condition"
    >{{ termos[index].message }}
    </generic-text>
  </generic-check-box>
</slot>
</template>

<script>
export default {
  components: {
    'close-button': CloseButton,
    'generic-button': GenericButton,
    'generic-check-box': GenericCheckBox,
    'generic-combo-box': GenericComboBox,
    'generic-title': GenericTitle,
    'generic-text': GenericText,
    'off-canvas-buttons': OffCanvasButtons
  },
  data () {
    return {
      termos: [
        { id: 0, term: true, message: 'Message 1' },
        { id: 1, term: false, message: 'Message 2' },
        { id: 2, term: false, message: 'Message 3' },
        { id: 3, term: false, message: 'Message 4' }
      ]
    }
  },
  methods: {
    checkBoxChanged (index) {
      console.log('checkBoxChangled: ' + index + ' ' + this.termos[index].term)
    }
  }
}
</script>

enter image description here

编辑

enter image description here

最佳答案

主要问题是这一行:

input-id="termos[index].id"

前面需要一个::

:input-id="termos[index].id"

否则,所有复选框的 input-id 都会设置为字符串 'termos[index].id'。然后,该字符串将用作输入的 id 和标签的 for。单击任何标签时,只会触发具有该 id 的第一个输入。

我还要注意,您的 generic-check-box 组件似乎没有定义 value 属性。另一个组件尝试同时使用 valuev-model 但如果没有 value 属性,这些组件不会传入值。

关于javascript - 如何在 VueJS 上使用 <slot v-for> 制作复选框列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57560775/

相关文章:

javascript - Vue js 和动态组件和内容

vue.js - VueJs v-for 如何在继续之前检查未定义的列表

vue.js - Vue 和 Vuex v-for 状态改变时不能正常更新

javascript - 如何使用 srcset 延迟加载图像?

javascript - Mongoose 的默认数据库数据

javascript - 将 css 转换添加到不断增长的元素列表中

javascript - Vue.js:Nuxt 错误处理

vue.js - 如何显示对象键值?

javascript - Vue 3 与 Vuex 4 : v-for only rendering a few -- but not all -- items in an array

javascript - 在这种情况下如何避免回调 hell ?