【问题标题】:Searching data by foreign key and display it in bootstrap-vue table通过外键搜索数据并显示在 bootstrap-vue 表中
【发布时间】:2020-07-06 11:40:38
【问题描述】:

基于这个How to render custom data in Bootstrap-Vue Table component?我创建了这个代码:

assignDocuments(id) {
        const documents = this.$store.state.documentList.filter(e => e.user.idUser === id);
        console.log(documents);
        let i;
        for(i=0; i < documents.length;i++) {
          return documents[i] ? `${documents[i].filename}` : 'loading...';
        }

      }

但它不像我需要的那样工作......我需要显示所有对象的名称(文件名)(在这种情况下,我在 documents中有 2 个对象> 数组)在数组中,但现在 b-table 中只显示第一个对象的名称。

编辑:

B表代码:

<b-table ref="table" small striped hover :items="$store.state.userList" :fields="fields" head-variant="dark">
     <template v-slot:cell(indexNumber)="row">
       {{ row.item.indexNumber}}
     </template>

     <template v-slot:cell(name)="row">
       {{ row.item.name}}
     </template>

     <template v-slot:cell(surname)="row">
       {{ row.item.surname}}
     </template>

     <template v-slot:cell(specialization.specName)="row">
       {{ row.item.specialization.specName}}
     </template>

     <template v-slot:cell(yearbook)="row">
       {{ row.item.yearBook.startYear }}<b>/</b>{{ row.item.yearBook.endYear }}
     </template>

     <template v-slot:cell(details)="row">
       <b-button size="sm" @click="row.toggleDetails" class="mr-2">
         {{row.detailsShowing ? 'Ukryj' : 'Pokaż'}} Szczegóły
       </b-button>
     </template>
</b-table>

字段:

fields:[
            {
              key: 'indexNumber',
              label: 'Numer indeksu'
            },
            {
              key: 'name',
              label: 'Imię'
            },
            {
              key: 'surname',
              label: 'Nazwisko',
            },
            {
              key: 'specialization.specName',
              label: 'Kierunek',
            },
            {
              key: 'yearBook',
              label: 'Rocznik',
            },
            {
              key: 'idUser',
              label: 'Documents',
              formatter: 'assignDocuments'
            },
            {
              key: 'details',
              label: 'Szczegóły',
            },
          ],

【问题讨论】:

  • 如果您能发布相关的 HTML 代码和任何其他相关的 JS 将会很有帮助

标签: vue.js


【解决方案1】:

这是因为在您的函数中,您在循环的第一次迭代之后是 returning。您需要获取所有文件名,然后返回:

在您分享的示例中,他们只分配了一个值;名字/姓氏作为字符串。在您的情况下,您似乎有多个文档可能与表中的单行相关。

尝试更改代码以返回所有文档:

assignDocuments(id) {
  const documents = this.$store.state.documentList.filter(e => e.user.idUser === id);
  console.log(documents);

  let fileNames = [];

  // Get the file name for each doc and put into our array
  documents.forEach(elem => fileNames.push(elem.filename));

  // Return the file names as a concatenated string
  return filesNames.length > 0 ? fileNames.join() : 'loading...';

}

编辑:

根据您的评论,我已更新,以便您稍后可以将其放置在按钮中!您可以做的是利用相同的功能,然后根据您为该行拥有的文档动态创建按钮。

<template>
  <div>
    <b-table :items="someTableItems" :fields="fields">
      <button v-for="(doc, index) in assignDocuments(someIdHere)" 
              :key="`docBtn-${index}`"
              :class="doc.cssClassObject">
         {{ doc.filename }}
      </button>
    </b-table>
  </div>
</template>

assignDocuments(id) {
  const documents = this.$store.state.documentList.filter(e => e.user.idUser === id);
  console.log(documents);

  let files= [];

  // Get the file name for each doc and put into our array
  documents.forEach(elem => {
    const isAccepted = elem.status === "accepted";

    files.push({
      status: elem.status, 
      filename: elem.filename, 
      cssClassObject : { accepted: isAccepted, rejected: !isAccepted }
    });
  });

  // Return the files as an array
  return files.length > 0 ? files : 'loading...';

}

【讨论】:

  • 现在可以了。谢谢!将来我会将原始名称替换为带有名称的按钮。按钮将根据文档状态更改颜色(接受:按钮将变为绿色,拒绝:红色)所以我假设这个示例将停止工作,因为我需要返回一个按钮而不是字符串?
  • 在这种情况下,您只需将fileNames.join() 更改为fileNames。这将返回文件名数组本身。然后,您可以使用 v-for 指令动态创建按钮组件并将文件名传递给它:)... 编辑:更新答案以反映您的新要求
  • @DestiX 我已经完成了我的答案更新,我还没有测试过那些新东西。但这个概念是正确的
  • 你真的很有帮助!最后一个问题:P(我更新了问题,添加了更多代码)。因此,您可以看到我使用格式化程序的文档,因为文档仅包含 idUser(在数据库中 idUser 是表用户中的主键和表文档中的外键),那么我应该怎么做才能显示按钮?我不能用你的解决方案简单地做到这一点,对吧?
  • 您肯定需要稍微修改您的方法。您可以做的是创建一个新属性来为您保存文档,然后绑定您的 button 组件以进行迭代,而不是像我在示例中那样调用 assignDocuments 函数。
猜你喜欢
  • 2014-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多