【问题标题】:Variables binded to fields of b-table绑定到 b 表字段的变量
【发布时间】:2020-02-06 14:21:26
【问题描述】:

最近我遇到了 bootstrap-vue 表及其项目的问题。 我用物品对象制作了一张桌子。我还有几个变量,我想成为表格项目的一部分。我想在这个项目插槽的表格模板中使用变量作为复选框输入的 v-model。

我试图把一个变量作为一个项目。该变量被表格看到,但没有绑定到它,因此复选框的任何更改都不会反映在变量值中。

我期望工作的代码。 带有模板和复选框输入的表格,带有 v-model 到组件数据变量:

<b-table class="settings-integrationsTable" outlined :items="integrationsTableItems()" :fields="print_integrations_fields">
   <template v-slot:cell(switch)="data">
      <b-form-checkbox type="checkbox" 
       v-model="data.item.model">
      </b-form-checkbox>
   </template>
</b-table>
data () {
   return {
      variable: false
   }
}
methods: {
   integrationsTableItems () {
      return {
         { model: this.variable },
      }
   }
}

我很想将变量直接放在上面看到的项目中,并使用它并将其绑定到我的表输入的 v-model 中。

我对这种情况的解决方法是,我的项目模型字段不是直接变量,而是它的字符串名称,例如。 '变量',我做了一个方法来返回它的值。我用这个值来表示复选框的选中状态,第二种方法改变它的状态。

<template v-slot:cell(switch)="data">
   <b-form-checkbox type="checkbox" 
   :checked="getIntegrationModel(data.item.model)"
   @change="changeIntegrationModel(data.item.model)">
   </b-form-checkbox>
</template>

我的第一个想法有什么可行的方法吗?我可能做错了什么。

【问题讨论】:

    标签: bootstrap-vue


    【解决方案1】:

    两个问题:

    methods: {
       integrationsTableItems () {
          return {
             { model: this.variable },
          }
       }
    }
    

    应该是:

    methods: {
       integrationsTableItems () {
          // b-table expects an array of items, not an object
          return [
             { model: this.variable },
          ]
       }
    }
    

    第二个问题是您将this.variable 传递到您的项目中,而不是绑定到您的组件数据的反应式getter/setter。更新项目的model 字段只会更新它在项目对象中的值,而不是数据中的值。

    如果数据中只有一个变量,则执行以下操作:

    <b-table class="settings-integrationsTable" outlined :items="integrationsTableItems()" :fields="print_integrations_fields">
       <template v-slot:cell(switch)="data">
          <!-- "model" will point to this.model (your data) -->
          <b-form-checkbox type="checkbox" v-model="model">
          </b-form-checkbox>
       </template>
    </b-table>
    

    更新(2019-10-10):

    在您的项目数据中放置一个 getter/setter(用于项目属性 model):

       integrationsTableItems () {
          return [
             {
               model: {
                 get() => {
                   return this.variable
                 },
                 set(val) => {
                   this.variable = val
                 }
               }
             },
          ]
       }
    

    【讨论】:

    • 第一个 - 是的,我知道。我的错。当然应该是数组,但这不是我的主题的问题。第二 - 是的,我知道我正在将 this.variable 的值传递给 items,而我的问题正是如何将整个反应式 getter/setter 传递给它。我想传递给项目的数据中有几个变量。
    • 抱歉回答晚了。感谢您的更新,但这仍然不是我需要的。它当然会起作用,但问题是,这些变量是在其他地方单独定义的,在这个视图中,我只是在导入后使用它们。您的修复对于 1-2 个变量会很好,但对于 10 个或更多变量来说太长了,这是我的情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多