如何在 Bootstrap-Vue Table 组件中渲染自定义数据?
How to render custom data in Bootstrap-Vue Table component?
我正在使用 Bootstrap-Vue 和 VueJs 并且需要帮助从多个数据对象渲染一些自定义数据和将数据显示为 table。具体来说,我正在关注 Bootstrap-Vue TABLE 文档的这一部分:https://bootstrap-vue.js.org/docs/components/table#formatter-callback 但我不确定如何将它应用到我的代码中。
这是我的场景:
我有一个数据 API 提供了 2 个不同的对象数组:posts
和 names
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_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>
有人知道如何显示我的用户的全名而不仅仅是用户 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
.
我正在使用 Bootstrap-Vue 和 VueJs 并且需要帮助从多个数据对象渲染一些自定义数据和将数据显示为 table。具体来说,我正在关注 Bootstrap-Vue TABLE 文档的这一部分:https://bootstrap-vue.js.org/docs/components/table#formatter-callback 但我不确定如何将它应用到我的代码中。
这是我的场景:
我有一个数据 API 提供了 2 个不同的对象数组:posts
和 names
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_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>
有人知道如何显示我的用户的全名而不仅仅是用户 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
.