【发布时间】:2020-08-09 03:08:35
【问题描述】:
我正在学习 vue2 并遇到了这种情况。我渲染了一个包含项目列表的组件,当我单击这些项目中的任何一个时,会显示另一个组件以及项目的详细信息。当在 created 钩子中创建明细组件时,我调用了一个 api 来获取明细数据。到现在为止还挺好。我的问题是单击另一个项目后,详细信息不会更改其数据。我理解这是因为创建的钩子没有被再次调用。
我尝试了updated、beforeUpdate 钩子,但在这两种情况下我都遇到了不好的行为,我猜这是因为它们调用了相同的fetchDetail 方法。我认为的另一个解决方案是,在将新选定项中的 selectedItem 状态属性传递给它之前,将其传递一个空值 {} 以使组件被渲染。但没有成功
来自父组件的数据
data {
selectedItem: {}
}
父组件中的方法
displayDetailHandler({ id, title }) {
this.selectedItem = {}; // intro provocar rerender
this.selectedItem = { id, title };
}
调用子组件
<template v-if="Object.keys(selectedItem).length > 0">
<Detail :item="selectedItem"></Detail>
</template>
子组件created钩子
created() {
this.fetchGameDays(); // call to api
}
更改已安装组件的数据的正确方法是什么?
【问题讨论】:
标签: javascript vue.js