【问题标题】:VueJS: Getting dynamic checkbox values in VueJS 2VueJS:在 VueJS 2 中获取动态复选框值
【发布时间】:2020-03-18 10:57:19
【问题描述】:

我正在使用 VueJS 2 和 Vuetify 来构建下面的订阅表单。从服务器获取并显示所有适用于订阅的首选项。图像中的首选项用于数字杂志订阅。对于印刷杂志的订阅偏好可能会有所不同。

从服务器获取的数据是这样的

preferences: [
    {
      id: "1",
      title: "Subscription frequence",
      options: ["Daily", "Weekly", "Fortnight", "Monthly"]
    },
    {
      id: "2",
      title: "Topics",
      options: ["Sports", "Politics", "Art", "Music", "Health", "Tech"]
    },
    {
      id: "3",
      title: "Promotional Offers",
      options: ["Daily", "Weekly", "Fortnight", "Monthly", "Never"]
    }
  ]

我使用v-for 来显示如下首选项:

<v-col
  v-for="pref in preferences"
  :key="pref.id"
>
  <span>{{ pref.title }}</span>
  <v-checkbox
    v-for="option in pref.options"
    :key="option"
    :v-model="pref.options"
    :label="option"
    color="red"
    value="option"
    hide-details
  >
  </v-checkbox>
</v-col>`

现在,由于所有首选项都具有相同的 options 数组,我无法弄清楚如何区分一个复选框组与另一个复选框组。因此为每个偏好组获取选中的复选框。

非常感谢任何提示。谢谢。

更新 这适用于input 类型,如@palash 答案所示。但不适用于 Vuetify v-checkbox

【问题讨论】:

  • 如果每个首选项中的 id 是唯一的,那么您可以尝试将此 id 与复选框值 (:value="pref.id+'-'+option") 一起附加并在收到所选值时提取。

标签: javascript vue.js vuetify.js nuxt.js


【解决方案1】:

在首选项对象中添加一个 selectedOption 键。

preferences: [
{
  id: "1",
  title: "Subscription frequence",
  options: ["Daily", "Weekly", "Fortnight", "Monthly"],
  selectedOption: []
},
{
  id: "2",
  title: "Topics",
  options: ["Sports", "Politics", "Art", "Music", "Health", "Tech"],
  selectedOption: []
},
{
  id: "3",
  title: "Promotional Offers",
  options: ["Daily", "Weekly", "Fortnight", "Monthly", "Never"],
  selectedOption: []
}

]

<v-checkbox
v-for="option in pref.options"
:key="option"
:v-model="pref.selectedOption"
:label="option"
color="red"
value="option"
hide-details

>

【讨论】:

    【解决方案2】:

    首先,尝试为preferences数组中的每个对象添加一个空的selected数组:

    preferences: [{
          id: "1",
          title: "Subscription frequence",
          options: ["Daily", "Weekly", "Fortnight", "Monthly"],
          selected: []
       },
       {
          id: "2",
          title: "Topics",
          options: ["Sports", "Politics", "Art", "Music", "Health", "Tech"],
          selected: []
       },
       {
          id: "3",
          title: "Promotional Offers",
          options: ["Daily", "Weekly", "Fortnight", "Monthly", "Never"],
          selected: []
       }
    ]
    

    接下来,在模板中更新 v-checkbox 模型:

    :v-model="pref.options"
    

    :v-model="pref.selected"
    

    现在,您可以轻松查看每个首选项中的选定选项,例如:

    • 对于订阅频率:
      • this.preferences[0].selected
    • 主题:
      • this.preferences[1].selected
    • 促销优惠:
      • this.preferences[2].selected

    简单演示:

    new Vue({
      el: '#app',
      data: {
        selected: [],
        roles: [{id:1,name:"Client"},{id:2,name:"Admin"},{id:3,name:"Guest"}]
      }
    })
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script>
    <div id="app">
      <div v-for="role in roles" :key="role.id">
        <label>{{role.name}}</label>
        <input type="checkbox" v-model="selected" :value="role"/>
      </div>
      
      <p>Selected Roles:</p>
      {{selected}}
    </div>

    复杂演示:

    new Vue({
       el: '#app',
       data: {
          preferences: [{
                id: "1",
                title: "Subscription frequence",
                options: ["Daily", "Weekly", "Fortnight", "Monthly"],
                selected: []
             },
             {
                id: "2",
                title: "Topics",
                options: ["Sports", "Politics", "Art", "Music", "Health", "Tech"],
                selected: []
             }
          ]
       }
    })
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script>
    <div id="app">
       <div v-for="pref in preferences" :key="pref.id">
          <h3>{{pref.title}}:</h3>
          <div v-for="option in pref.options" :key="option">
             <label>{{option}}</label>
             <input type="checkbox" v-model="pref.selected" :value="option" /><br>
          </div>
          <p>Selected {{pref.title}}:</p>
          {{pref.selected}}
          <br><br><hr/>
       </div>
    </div>

    【讨论】:

    • 由于某种原因,selected 数组没有填充选定的值。这对你有用吗?
    • 你的意思是演示不适合你。选中 Client 复选框后,我可以清楚地看到 UI 中的值..
    • 演示有效,但在我的本地却没有。不确定是不是因为 vuetify v-checkbox 行为。
    • 我还用你的preferences 数据添加了一个演示。您可以看到它也运行良好。可能有一些与v-checkbox 相关的问题。您需要检查插件文档。
    • 没错,您的示例有效。但是如果我们用 Vuetify v-checkbox 替换 input 元素,同样的方法也不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 2018-02-17
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 2022-07-15
    • 2020-01-05
    相关资源
    最近更新 更多