从JSON中选择,在Vue.js中使用无线电输入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从JSON中选择,在Vue.js中使用无线电输入相关的知识,希望对你有一定的参考价值。

我有道具:['属性']

    {
    "name": "Color",
    "variant": [
      {
        "name": "Red"
      },
      {
        "name": "Green"
      },
      {
        "name": "Blue"
      }
    ]
  },
  {
    "name": "Size",
    "variant": [
      {
        "name": "L"
      },
      {
        "name": "XL"
      },
      {
        "name": "XXL"
      }
    ]
  }

在模板中:

<div class="form-group" v-for="(attribute, index) in attributes">
    {{attribute.name}}
        <div v-for="(variant, vindex) in attribute.variant">
              <input type="radio"
                   :value="[{name: attribute.name, variant:variant.name}]"
                   :id="'radio' + vindex"
                   :name="'group' + index">
                   {{variant.name}}
        </div>
</div>

结果:enter image description here

问题:如何返回阵列中选定的单选按钮?例如:

  [{
    "name": "Color",
    "variant": 
      {
        "name": "Blue"
      }
  },
  {
    "name": "Size",
    "variant":
      {
        "name": "XL"
      }
  }]

单选按钮不会将数组添加为复选框。

答案

你可以做这样的事情。

每次都需要splice现有项目,以便增加新的价值。

主要部分是搜索项目并删除,您可以通过循环查看当前项目并查找现有项目的索引并将其删除,以便更新新值。

检查以下代码。

var attributes = [{
    "name": "Color",
    "variant": [
      {
        "name": "Red"
      },
      {
        "name": "Green"
      },
      {
        "name": "Blue"
      }
    ]
  },
  {
    "name": "Size",
    "variant": [
      {
        "name": "L"
      },
      {
        "name": "XL"
      },
      {
        "name": "XXL"
      }
    ]
}];

new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue.js!',
    attributes: attributes,
    selectedData:[]
  },
  methods:{
     setValue( name, value) {
      //console.log(name,value);
      
      var self = this;
      this.selectedData.forEach(function(val, index){
      
         if(val['name'] == name) {
           self.selectedData.splice(index, 1);
           return false;
         }
      });
      
      
      this.selectedData.push({
        "name": name,
        "variant": 
          {
            "name": value
          }
      });   
     }
  }
})
<!DOCTYPE html>
<html>
<head>
<script> console.info = function(){} </script>
<script src="https://vuejs.org/js/vue.js"></script>
<script src="https://code.jquery.com/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
  <style>.half{width:50%;float:left;}</style>
</head>
<body>
  <div id="app">
    <div class="half">
     
        <div class="form-group" v-for="(attribute, index) in attributes">
    {{attribute.name}}
           <div v-for="(variant, vindex) in attribute.variant">
                <label>
                <input @click="setValue(attribute.name, variant.name)" type="radio"
                   :value="[{name: attribute.name, variant:variant.name}]"
                   :id="'radio' + vindex"
                   :name="'group' + index">
                   {{variant.name}}</label>
            </div>  
           </div>          
      </div>
          <div class="half">
      <pre>{{ selectedData }}</pre></div>
   </div>
  </body>
</html>

以上是关于从JSON中选择,在Vue.js中使用无线电输入的主要内容,如果未能解决你的问题,请参考以下文章

当用户从 Vue.js 中的 JSON 对象中选择第一个键时,如何显示剩余的键值?

从循环Vue.js中的每个选择中获取数据

使用表单的响应将数据集属性保存在 JSON 文件中 (Vue.js)

Vue.js 在数组中搜索关键字

如何从 vue.js axios POST 在 Laravel 中获取 JSON?

从无线电输入标签中添加和删除类