【发布时间】:2020-07-20 23:42:40
【问题描述】:
我有一个 Vue 组件从其父组件接收“项目”数组。
我已将它们分类,每个类别中有两个“项目”:
computed: {
// sort items into categories
glass: function() {
return this.items.filter(i => i.category === "glass").slice(0, 2);
},
ceramics:
// etc...
我需要将这两个项目都放在categories.items 中,然后将它们作为道具传递给另一个组件:
data() {
return {
categories: [
{ name: "Glass", sort: "glass", items: {} },
{ name: "Ceramics", sort: "ceramics", items: {} },
{ name: "Brass", sort: "brass", items: {} },
{ name: "Books/Comics", sort: "books", items: {} },
{ name: "Collectibles", sort: "collectibles", items: {} },
{ name: "Pictures", sort: "pictures", items: {} },
{ name: "Other", sort: "other", items: {} }
]
};
},
当我使用 created 或 mounted 时,没有任何内容通过,当我使用 beforeDestroy 或 destroy 和 console.log 时,结果可以正常工作,但是退出页面时它们没有用.
“项目”来自 Axios GET 请求,这可能是为什么?
父组件的GET请求:
methods: {
fetchItems() {
// items request
let uri = "http://localhost:8000/api/items";
this.axios.get(uri).then(response => {
// randomize response
for (let i = response.data.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[response.data[i], response.data[j]] = [
response.data[j],
response.data[i]
];
}
this.items = response.data;
});
}
},
将 props 传递给子组件:
<div
class="items-container"
v-for="category in categories"
:key="category.name"
>
<router-link :to="'category.link'" class="category-names-home-link">
<h2 class="category-names-home">{{ category.name }}</h2>
</router-link>
<router-link
:to="'category.link'"
class="home-view-all"
@mouseover.native="expand"
@mouseout.native="revert"
>View All...</router-link
>
<div class="items">
<!-- Pass to child component as props: -->
<SubItem :item="categories.items" />
<SubItem :item="categories.items" />
</div>
</div>
【问题讨论】:
-
您能否在此处使用jsfiddle 或snippet 为此创建small demo 以显示正在发生的问题。对于 ajax 调用,您可以使用任何公共 API 来显示虚拟数据。另外,不要在演示中添加完整的代码。可能只有一个计算属性。
-
如何将数据传递给孩子?可以发一下吗?
-
子组件添加到页面之前,axios请求是否完成?如果没有,数据将不会显示在 created 或 Mounted 中。
-
如果您从子组件中的父组件传递信息,则应该是
props,而不是data或computedvuejs.org/v2/guide/components-props.html -
@ToniMichelCaubet 我在另一个组件中以 props 的形式传递数据,并尝试使用计算,两者都工作正常。除非我误会了?
标签: javascript vue.js vuejs2 vue-component