Bootstrap Vue,<b-table>,具有基于表的绑定项目数据的<< input type =“ checkbox” />

时间:2019-02-14 17:14:38

标签: vue.js checkbox bootstrap-vue

我有一个充满数据的表。我要绑定到b表中复选框的数据上有一个selected属性。我似乎不知道该怎么做。

我的数据:

data: () => ({
  tableData: [
    {
      title: "title01",
      desc: "desc01",
      selected: false
    },
    {
      title: "title02",
      desc: "desc02",
      selected: false
    },
  ],
  tableColumns: [
    { key: "selected", label: "", sortable: false }
    { key: "title", label: "Title", sortable: false },
    { key: "desc", label: "Description", sortable: false }
})

html:

<b-table id="myTabel"
  hover
  striped
  :items="tableData"
  :fields="tableColumns">
  <template slot="selected" slot-scope="row">
    <b-form-group>
      <input type="checkbox" v-model="How_To_Bind_To_Object_Prop?">
    </b-form-group>
  </template>
</b-table>

在我生命中,我无法设置v-model来实际绑定到表数据。 v-model="tableData.selected"将所有复选框绑定到所有数据对象。因此,如果您选择一个,则全部选中,反之亦然。我只是不知道如何仅将其绑定到该行的数据。

我可以通过使用更传统的HTML并使用Vue的v-for遍历tableData来绑定每个表行来做到这一点。但是,我们正在尝试将大多数(如果不是全部)表单迁移为使用bootstrap-vue。

所以,这很漂亮:

<table>
    <thead>
        <tr>
            <th :key="key" v-for="(tableColumn, key) in tableColumns">
                {{ tableColumn.label }}
            </th>
        </tr>
    </thead>
    <tbody>
        <tr :key="key" v-for="(tableRow, key) in tableData">
            <td>
                <input type="checkbox" 
                    v-model="tableRow.selected">
            </td>
            <td>
                {{ tableRow.title }}
            </td>
            <td>
                {{ tableRow.desc }}
            </td>
        </tr>
    </tbody>
</table>

2 个答案:

答案 0 :(得分:2)

您可以在作用域内的插槽中按以下方式访问行项目,并将嵌套的复选框绑定到selected属性:

<template slot="selected" slot-scope="row">
   <b-form-group>
       <input type="checkbox" v-model="row.item.selected" /
   </b-form-group>
</template>

Full Codesandbox code

答案 1 :(得分:1)

***该答案已被编辑。 @BoussadjraBrahim用户评论了一些回答此问题的代码和框代码。

正确的解决方法如下:

<b-table id="myTable"
  hover
  striped
  :items="tableData"
  :fields="tableColumns">
  <template slot="selected" slot-scope="row">
    <b-form-group>
      <input type="checkbox" v-model="row.item.selected">
    </b-for-group>
  </template>
</b-table>

先前的错误答案: 使用this SO question的答案,我尝试过:

<b-table id="myTable"
  hover
  striped
  :items="tableData"
  :fields="tableColumns">
  <template slot="selected" slot-scope="row">
    <b-form-checkbox id="'selected'+row.index" v-model="row.item.selected" />
  </template>
</b-table>

使用<b-form-checkbox>id="'selected'+row.index"只能绑定到第一行。再加上样式与我想要的不同。