如何在 Bootstrap-Vue Table 组件中渲染自定义数据?

How to render custom data in Bootstrap-Vue Table component?

我正在使用 Bootstrap-VueVueJs 并且需要帮助从多个数据对象渲染一些自定义数据和将数据显示为 table。具体来说,我正在关注 Bootstrap-Vue TABLE 文档的这一部分:https://bootstrap-vue.js.org/docs/components/table#formatter-callback 但我不确定如何将它应用到我的代码中。

这是我的场景:

我有一个数据 API 提供了 2 个不同的对象数组:postsnames

Posts:

    [
  {
    "userId": 1,
    "id": 1,
    "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
    "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
  },
...snip..
    ]

and Names:

[{"userId":1,"first_name":"Neill","last_name":"Dexter","email":"ndexter0@thetimes.co.uk"},
...snip
]

posts 数组包含一个 userId 键但没有用户名。 names 数组包含该用户的 userId 键和 first_namelast_name

我想做的只是在我的 Bootstrap-vue Table 组件中显示用户的全名而不是 userId 因为只是显示userId 没有意义。

这是我的尝试 (link to editable live code):

<template>
  <div>
    <b-table :items="posts" :fields="fields">
      <!-- A custom formatted column -->
      <template slot="name" slot-scope="data">{{ data.value.userId }}</template>
    </b-table>
  </div>
</template>

<script>
import axios from "axios";
export default {
  data() {
    return {
      posts: [],
      names: [],
      // key name is the slot name
      fields: [
        { key: "id" },
        { key: "title" },
        { key: "body" },
        { key: "name", label: "Assigned To", formatter: "assignNames" }
      ]
    };
  },
  created() {
    this.getPosts();
    this.getNames();
  },
  methods: {
    getPosts() {
      axios.get("https://jsonplaceholder.typicode.com/posts").then(resp => {
        this.posts = resp.data;
      });
    },
    getNames() {
      axios
        .get("https://my.api.mockaroo.com/users.json?key=f119e0f0")
        .then(resp => {
          this.names = resp.data;
        });
    },
    assignNames() {
      var i;
      for (i = 0; i < this.posts.length; i++) {
        if (this.posts[i].userId !== null) {
          const result = this.names.filter(name => {
            return name.userId === this.posts[i].userId;
          });
          this.posts[i].userId =
            result[0].first_name + " " + result[0].last_name;
        }
      }
    }
  }
};
</script>

有人知道如何显示我的用户的全名而不仅仅是用户 ID 吗?谢谢!

assignNames(id) {
  const user = this.names.find(e => e.userId === id);
  return  user ? `${user.first_name} ${user.last_name}` : 'loading...';
}

...但是,显然,键必须是 userId,因为这是 post 结构中引用的 属性 的名称:

{ key: "userId", label: "Assigned To", formatter: "assignNames" }

看到了here.

此外,您不应该命名第二个 api names 的结果,而是 users.


注意: 在我链接的示例中,我将 users 的结果放在项目中保存的 json 中并模拟了 api 通过承诺获得 json 的调用,因为您的 api 密钥超出了每日限制并返回 500.