如果 selectedLeague 已更改,我正在尝试重新分配组件
<label class="label">Select league</label>
<div class="selector">
<v-select
v-model="selectedLeague"
:dropdown-should-open="dropdownShouldOpen"
:options="leagues"
label="displayLeague"
placeholder="Select a league"
/>
</div>
<div v-if="selectedLeague">
<LeagueTopScorers :is="selectedLeague" :selectedLeague="selectedLeague.id.toString()" />
</div>
在 LeagueTopScorers 组件中,我正在获取 API 以获取选定联赛中的最佳得分手。
我尝试过:watch、v-on:、created()
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
确实当selectedLeague更改时重新渲染1,但它不会重新安装。 仅当selectedLeague从 falsy 值更改为 truthy 值时才会挂载(因为此时v-if 更改)。您的问题存在一些问题:
v-select是什么,是什么,或者:is属性在.根据您发布的代码片段,我猜测以下内容:
v-select是 vue-select 或 Vuetify 选择组件:is在上的工作方式与在上的工作方式相同。提示:不会,除非你自己编码,我对此表示怀疑的 init 生命周期挂钩中(例如:onMounted)在您将selectedLeague中存储的对象替换为另一个对象。如果我是正确的,实现此行为的最简单、最干净的方法是创建一个计算2:
...并在
v-if、:key和:selectedLeague中使用它:(没有 包装器)。
每次
leagueId更改时,上面都会创建一个的新实例,并且仅在leagueId不为 false 时渲染一个。我相信这就是您在技术上想要实现的目标3。注释:
1 - 要验证,请使用
onUpdated(() => console.log('updated...'))代码>2 - 如果
selectedLeague,则使用selectedLeague.value?.id.toString()是一个ref3 - 同时,我确信无需创建
每次leagueId更改时,但如果没有更多详细信息和/或上下文,我无法提供更多帮助