【问题标题】:How to break row inside a Bootstrap table?如何打破引导表内的行?
【发布时间】:2022-01-10 14:59:27
【问题描述】:

我正在尝试在表内的数组上创建.join()。预期结果是每辆车(在下面的示例中)都排在一行。

我尝试过使用.join("\r\n").join("<br />"),但它不起作用。我错过了什么?

new Vue({
  el: "#table",
  data() {
    return {
      items: [
        { firstname: "John", lastname: "Doe", cars: ["Ferrari", "Tesla"] },
        { firstname: "Jane", lastname: "Doe", cars: ["BMW", "Civic"] },
        { firstname: "Jack", lastname: "Doo", cars: ["Corsa", "Golf"] },
        { firstname: "Julie", lastname: "Doo", cars: ["Fiesta", "Brasilia"] }
      ],
      fields: [
        { key: "firstname", label: "First name" },
        { key: "lastname", label: "Last name" },
        { key: "cars", label: "Cars" }
      ]
    };
  },
  methods: {
    join() {
      for (let item of this.items) {
        item.cars = item.cars.join("<br />")
      }
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.11/vue.min.js"></script>
<script src="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.js"></script>

<div id="table">
  <b-button @click="join">Join Array</b-button>
  <b-table :fields="fields" :items="items" />
</div>

上面的 sn-p 相同,但在 CodePen

【问题讨论】:

  • 也许你需要重新渲染?

标签: javascript arrays twitter-bootstrap vue.js


【解决方案1】:

您看到的问题是内容没有被解释,因此它显示为文本。要对此进行调整,请使用cell(key) 插槽。然后在槽内,使用v-html将字符串解释为html。

new Vue({
  el: "#table",
  data() {
    return {
      items: [
        { firstname: "John", lastname: "Doe", cars: ["Ferrari", "Tesla"] },
        { firstname: "Jane", lastname: "Doe", cars: ["BMW", "Civic"] },
        { firstname: "Jack", lastname: "Doo", cars: ["Corsa", "Golf"] },
        { firstname: "Julie", lastname: "Doo", cars: ["Fiesta", "Brasilia"] }
      ],
      fields: [
        { key: "firstname", label: "First name" },
        { key: "lastname", label: "Last name" },
        { key: "cars", label: "Cars" }
      ]
    };
  },
  methods: {
    join() {
      for (let item of this.items) {
        item.cars = item.cars.join("<br />")
      }
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.11/vue.min.js"></script>
<script src="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.js"></script>

<div id="table">
  <b-button @click="join">Join Array</b-button>
  <b-table :fields="fields" :items="items">
      <template #cell(cars)="data">
        <span v-html="data.value"></span>
      </template>
  </b-table>
</div>

【讨论】:

  • 我通常建议不要使用 v-html,因为它会将您的网站打开到XSS vulnerabilities。所以如果用户有能力编辑这些cars字符串,我会小心使用它。
【解决方案2】:

假设您希望它始终位于单独的行上(不仅是在单击示例中的按钮之后),那么您可以使用&lt;b-table&gt; 提供的插槽来自定义列的内容,并使用简单的v-for 将每个元素呈现在它自己的 &lt;div&gt; 中。

new Vue({
  el: "#table",
  data() {
    return {
      items: [
        { firstname: "John", lastname: "Doe", cars: ["Ferrari", "Tesla"] },
        { firstname: "Jane", lastname: "Doe", cars: ["BMW", "Civic"] },
        { firstname: "Jack", lastname: "Doo", cars: ["Corsa", "Golf"] },
        { firstname: "Julie", lastname: "Doo", cars: ["Fiesta", "Brasilia"] }
      ],
      fields: [
        { key: "firstname", label: "First name" },
        { key: "lastname", label: "Last name" },
        { key: "cars", label: "Cars" }
      ]
    };
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.12/vue.min.js"></script>
<script src="https://unpkg.com/bootstrap-vue@2.21.2/dist/bootstrap-vue.js"></script>

<div id="table">
  <b-table :fields="fields" :items="items">
    <template #cell(cars)="{ value }">
      <div v-for="car in value" :key="car">
        {{ car }}
      </div>
    </template>
  </b-table>
</div>

【讨论】:

  • 事实上,我已经在使用&lt;b-table&gt; 插槽。问题是:这样,数据不会以单独的行发送到表中。例如,这会阻碍导出表或重用它,因为我需要做的所有事情都需要我重新格式化包含数组的列。我正在尝试重用代码。
  • 不太确定我是否理解您所描述的问题。但可能值得添加到问题中,以便人们了解您在做什么的全貌。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多