javascript - 回到上一步为什么不显示v-show?
问题描述
我在 VUE 中有一个 SAP,它由 4 个步骤组成。当在第一步按钮中提交并重定向到第二步时,如果我返回到第一步,最后一个组件将停止显示,尽管在更改组件之前已显示。这是我的模板
<input
type="text"
id="animalName"
ref="animalName"
v-model="animalFormInfo.name"
@keypress="onChangeName($event)"
@keyup="onChangeName($event)"
/>
<div class="loader-spinner" v-if="loading">
<app-loader>
</div>
</div>
</div>
</div>
<div v-show="isNameCompleted">
<div class="from-group">
<h1 class="title">
For
<span>{{this.formInfo.name}}</span>, you have:
</h1>
<div class="list-services">
<div
class="column-service"
v-for="estimation in filteredEstimation"
v-bind:key="estimation.name"
>
<div>{{estimation.name}}</div>
<div>{{estimation.description}}</div>
<div>{{estimation.price.toString().replace(".", ",")}}</div>
</div>
</div>
</div>
</div>
<div class="button-line" v-show="isLoaderFinished"></div>
<div class="forward" v-show="isLoaderFinished">
<div class="forward-button">
<button
ref="submit"
v-bind:disabled="!isFormCompleted"
type="submit"
@click="navigateToCreate"
>
SEND INFO
</button>
</div>
</div>
下面是我控制组件负载的数据和方法
data() {
return {
step: 1,
isFormCompleted: false,
isBreedSelected: false,
isNameCompleted: false,
loading: false,
isLoaderFinished: false,
myTimeout: 0
};
},
methods:{
onChangeName(event) {
if (this.myTimeout >= 0 && event) {
clearTimeout(this.myTimeout);
this.loading = true;
this.isNameCompleted = false;
}
this.myTimeout = window.setTimeout(() => {
this.isNameCompleted = true;
const typedAnimalName = event.target._value;
this.capitalizeAnimalName(typedAnimalName);
this.loading = false;
this.isLoaderFinished = true;
this.isFormCompleted = true;
setTimeout(() => (this.$refs.scrolled_3.focus()), 10);
}, 2200);
},
capitalizeAnimalName(typedAnimalName) {
var splitAnimalName = typedAnimalName.toLowerCase().split(' ');
for (var i = 0; i < splitAnimalName.length; i++) {
splitAnimalName[i] = splitAnimalName[i].charAt(0).toUpperCase() + splitAnimalName[i].substring(1);
}
return this.animalName = splitAnimalName.join(' ');
},
},
一旦我到达第 2 步并返回第 1 步,只会显示信息,直到输入 id 为“animalName”。我究竟做错了什么?有什么理由为什么在加载第一个组件时它遵循逻辑并显示它们,一旦我转到下一个组件,它们就会消失?
谢谢大家的时间和提前帮助
解决方案
如果每一步都是自己的组件,你可以使用keep-alive
组件缓存组件和它们的状态,这样当你在它们之间切换时,它们的状态会被保留。在这种情况下,我个人更喜欢使用 Vuex,因为它更简单。
<keep-alive>
<step-1-component v-if="step === 1"></step-1-component>
<step-2-component v-if="step === 2"></step-2-component>
<step-3-component v-if="step === 3"></step-3-component>
</keep-alive>
推荐阅读
- r - 在 R 中处理大整数
- json - 使用嵌套字段解析 json (Kotlin)
- python - 表 * 没有名为 user_id,django 的列
- javascript - 如何在画布中用 beginPath 写字母?
- python - 在 seaborn 条形图中绘制形成每个组的实例数
- python-3.x - 连接字典的两个键
- c# - 为什么 GridView 过滤器不适用于我?
- sleep - PIC24FJ128GA204无法从深度睡眠中唤醒
- javascript - 使用 VSCode 调试器进行 Jest 测试会引发错误“SyntaxError:无法在模块外使用导入语句”
- javascript - 使用带有 html 选择选项的 v-model