javascript - Vue JS - 将默认值注入(inject)自定义单选组

标签 javascript input vue.js radio-button

所以我尝试向我编写的自定义 radio 组件注入(inject)默认值

代码如下:

<template>
<div class="custom-radio-button">
  {{value}}
  <div  v-for= "item in localValue">
    <input type="radio" :value="item.value" name=item.name @click=onSelected(item.value) >
    <span>{{item.label}}</span>
    </input>
    </div>

</div>

<script>
  import Vue from 'vue'

  const name = 'CustomRadioButton'

  export default {
    name,
    componentName: name,

    props: [ 'name', 'value', 'isDefault', 'label'],


    data() {
      return { 
        localName: this.name,
        localValue: this.value
      }
    },
    methods: {
      onSelected (value) {
        this.$emit('clicked', value)
      }
    }
  }
</script>

我是这样调用它的:

<CustomRadioButton :value=RadioFieldData  @clicked="isRadioButtonSelection" isDefault='yellow'></CustomRadioButton>

这是随之而来的 Json 数据

RadioFieldData:[
  {label:'Fire', value:'red', name:'colour' },
  {label:'Sun', value:'yellow', name:'colour',isDefault:'yellow'},
  {label:'Water', value:'blue', name:'colour'}
]

我的问题是将值“yellow”传递给单选按钮组的最佳方法是什么?

最佳答案

您的问题是,在模板中使用 Prop 时,需要以 kebab-case 格式表示。要将 isDefault 设置为“yellow”,您需要使用

is-default="yellow"

参见https://v2.vuejs.org/v2/guide/components.html#camelCase-vs-kebab-case

一旦您能够正确读取该属性,您就可以使用

:checked="item.value == isDefault"

这是一个例子。

Vue.component('custom-radio-button', {
  template: `<div class="custom-radio-button">
  Default: {{isDefault}}
  <div v-for="item in value">
    <input type="radio" :value="item.value" name="item.name" @click="onSelected(item.value)" :checked="item.value == isDefault" />
    <span>{{item.label}}</span>
  </div></div>`,
  props: ['value', 'isDefault'],
  methods: {
    onSelected(value) {
      this.$emit('clicked', value)
    }
  }
})

new Vue({
  el: '#app',
  methods: {
    isRadioButtonSelection (val) {
      console.log('isRadioButtonSelection', val)
    }
  },
  data: {
    RadioFieldData: [{"label":"Fire","value":"red","name":"colour"},{"label":"Sun","value":"yellow","name":"colour","isDefault":"yellow"},{"label":"Water","value":"blue","name":"colour"}]
  }
})
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<div id="app">
  <custom-radio-button :value="RadioFieldData" 
                       @clicked="isRadioButtonSelection"
                       is-default="yellow">
  </custom-radio-button>
</div>

关于javascript - Vue JS - 将默认值注入(inject)自定义单选组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47191856/

相关文章:

javascript - jQuery Click 事件不适用于 jCarousel

javascript - 是否可以触发不在 input 或 textarea 标签中的 javascript keypress 事件?

javascript - 如何声明一组匹配文件的导出类型?

javascript - 动态访问对象字段

javascript - 如果单击滚动条,则取消 mousedown 事件?

jquery - icloud.com 喜欢表单输入字段

Javascript:创建一个类似对象的缓冲区,用于收集输入的击键,然后按时间间隔将它们逐个释放到函数

java - 从 Windows 命令行键盘读取数据,无需将光标移动到下一行

javascript - 自定义 v-repeat 过滤器 Vue.js

firebase - 在 Google Firestore 中处理查询游标的正确方法? (Vue/Nuxt.js)