自定义 Bootstrap-Vue 复选框组件

Posted

技术标签:

【中文标题】自定义 Bootstrap-Vue 复选框组件【英文标题】:Custom Bootstrap-Vue checkbox component 【发布时间】:2021-05-15 01:51:03 【问题描述】:

我正在尝试制作组件来创建动态表单,但我遇到了复选框问题

<template v-if="type === 'switch'">
            <b-form-checkbox
                switch
                size="lg"
                :name="name"
                :id="name"
                :ref="name"
                :value="value"
                v-on:input.native="updateValue($event.target.value)"
                > value </b-form-checkbox
            >
        </template>

这是我如何调用代码

<FormRow
                type="switch"
                name="productor"
                rule="required"
                v-model="selectedCompany.productor"
            />

问题在于v-model 的内容不会改变,但会随着输入字段而改变。怎么了?有人可以帮我吗?

附言我正在使用 bootstrap-vue 谢谢!

【问题讨论】:

这些可以有不同的使用方式。你期望value 被选中和取消选中是什么?你能告诉我updateValue吗? updateValue: function(value) this.$emit("input", value); 我仍然不知道你期望的价值是什么。真/假? 我期望复选框的状态,如果设置了复选框,则为 true,如果未选中,则为 false。问题是现在它以 empy 开头,然后我设置为 true 并且我可以工作,但是当我切换回 false 时它仍然是 true。 【参考方案1】:

您在复选框中缺少v-model。删除value 属性和input 监听器,并使用v-model 和computed setter 优雅地重用来自父级的prop 值作为模型而不改变它:

<b-form-checkbox
  switch
  size="lg"
  :name="name"
  :id="name"
  :ref="name"
  v-model="bvalue"
> value 
</b-form-checkbox>
computed: 
  bvalue: 
    get()  return this.value ,
    set(value)  this.$emit('input', value) 
  

您也可以删除updateValue 方法。

【讨论】:

【参考方案2】:

也许这些信息可以提供帮助: 我从设置 selectedCompany: 状态的商店获取数据, 然后从父组件(模态)我以这种方式绘制字段

 <FormRow
 type="switch"
 name="productor"
 rule="required"
 v-model="selectedCompany.productor"
 />

在父级中我执行以下操作:

 <template v-if="type === 'switch'">
     <b-form-checkbox
         switch
         size="lg"
         :name="name"
         :id="name"
         :ref="name"
         :value="value"
         :checked="value"
         v-on:change.native="updateValue($event.target.value)"
         > value </b-form-checkbox
    >
  </template>

methods: 
    updateValue: function(value) 
        this.$emit("input", value);
    
,

在迁移文件中,我将字段生产者设置为布尔值,默认(0),在模型中,我以这种方式改变字段

 public function getProductorAttribute($value)
    return $value ? true : false;

现在一切都应该更清楚了

【讨论】:

如果这样做,初始值将无法正确设置。例如,如果父级的值以true 开头,复选框将不会反映它。

以上是关于自定义 Bootstrap-Vue 复选框组件的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap-Vue 组件上的触发事件(测试)

在 bootstrap-vue 中渲染自定义样式

在 bootstrap-vue 中自定义 b 分页

在 Nuxt 项目中自定义 bootstrap-vue

使用 bootstrap-vue 运行 jest 时的问题

Bootstrap-vue 复选框,选中时检查附加选项