我正在使用 Bootstrap-Vue 和 VueJs ,并且需要一些有关帮助从多个数据对象呈现自定义数据并将数据显示到表格中的帮助。具体来说,我正在遵循Bootstrap-Vue TABLE文档的这一部分:https://bootstrap-vue.js.org/docs/components/table#formatter-callback,但不确定如何将其应用于代码。
这是我的情况:
我有一个数据API,提供2种不同的对象数组:posts
和names
帖子:
[
{
"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..
]
和名称:
[{"userId":1,"first_name":"Neill","last_name":"Dexter","email":"ndexter0@thetimes.co.uk"},
...snip
]
posts
数组包含一个userId
键,但没有用户名。 names
数组包含该用户的userId
键和first_name
和last_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>
任何人都有关于如何显示用户全名而不是仅显示userId的任何提示?谢谢!
答案 0 :(得分:1)
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中,并通过承诺将json作为您的api键来模拟api调用。超过了每日限制,并返回了500
。