从子级向父级发射数据时,无法刷新vue引导表

时间:2019-11-20 10:38:58

标签: vue.js bootstrap-4 nuxt.js

我正在使用vue-bootstrap https://bootstrap-vue.js.org/docs/components/table/,并且已经为标头实现了一个插槽,因此我可以在每个包含搜索框的列标头中使用显示和隐藏按钮。标头在插槽中。在字段数据中,我添加了一个布尔值的showFilter属性。因此,想法是在真与假之间切换。现在,当在子级中将数据更改发送给它更新的父级时,所有这些都起作用。但是,表本身不会更新,除非您触发其他操作(如尝试对标题进行排序),然后它才会更新。我已经尝试过强制刷新上面url中提到的表数据,但这似乎不起作用,或者因为没有示例,所以我不知道如何使用它。

父母

<template>
<b-table
      ref="table"
      :items="filtered"
      :fields="fields"
      sort-icon-left
      responsive="sm"
    >
      <template v-slot:head()="data">
        <TableHeader :data="data" :filters="filters" />
      </template>
    </b-table>
</template>

data() {
  return {
      fields: [
        {
          key: "name",
          sortable: true,
          showFilters: true,
        },
        { key: "age", sortable: true, showFilters: true },
      ],
    }
}

孩子

<template>
  <div>
    <div class="text-info">{{ data.label.toUpperCase() }}</div>
    <div>
      <button @click="setUpdate(data.field)">filters</button>
    </div>
    <input
      v-show="data.field.showFilters"
      v-model="filters[data.field.key]"
      :placeholder="data.label"
      @keyup="$emit('update:filters[data.field.key]')"
    />
  </div>
</template>

  methods: {
    setUpdate(field) {
      this._originalField = Object.assign({}, field);
      field.showFilters = !field.showFilters;
      this.$root.$emit("update:field.showFilters", "bv::refresh::table");
      console.log(field.showFilters);
    }
  }

1 个答案:

答案 0 :(得分:0)

我通过使用bootstrap折叠按钮并在孩子中处理所有问题解决了这个问题,我认为这更有意义!

   <b-collapse :id="'collapse' + data.field.key">
      <b-card>
        <!-- content -->
      </b-card>
    </b-collapse>