javascript - 当组件在 Vuejs 中再次渲染时如何保持更改
问题描述
我有 4 个组件,它们取决于两个布尔值onePage
,currentStep
应该一个一个或全部一起加载。
<div v-if="!onePage">
<Component_1 v-show="currentStep === 1" @eventHandler1="someFunc()" :prop="someData1" />
<Component_2 v-show="currentStep === 2" @eventHandler2="someFunc()" :prop="someData2" />
<Component_3 v-show="currentStep === 3" @eventHandler3="someFunc()" :prop="someData3"/>
<Component_4 v-show="currentStep === 4" @eventHandler4="someFunc()" :prop="someData4" />
</div>
<div v-else class="mt-5 pt-1">
<Component_1 @eventHandler1="someFunc()" :prop="someData1" />
<Component_2 @eventHandler2="someFunc()" :prop="someData2" />
<Component_3 @eventHandler3="someFunc()" :prop="someData3"/>
<Component_4 @eventHandler4="someFunc()" :prop="someData4" />
</div>
问题是如何在切换时保持每个组件内的更改onePage
?
原因例如 Component1 不会保留所做的内部更改(例如数据对象的更改),并且当它通过第二个 Div 中onePage: false, currentStep: 1
的条件呈现时它会重置为默认值v-else
解决方案
在您的代码中,两个块中的 component_x 是不同的组件,这意味着它们具有不同的内部状态数据,因此切换 onePage 实际上会切换显示/隐藏不同的组件,并且无法保留内部更改。但是,您可以考虑将所有内部状态数据放入一个 prop 对象中,然后在父对象中初始化该对象并将其传递给 2 个组件。
编辑: 以下也可以是一个解决方案,它对每个组件 1-> 4 仅使用一个实例。您也不必移动内部状态来支持。
<div class="mt-5 pt-1"> <!-- you can add class binding here if needed -->
<Component_1 v-show="onePage || currentStep === 1" @eventHandler1="someFunc()" :prop="someData1" />
<Component_2 v-show="onePage || currentStep === 2" @eventHandler2="someFunc()" :prop="someData2" />
<Component_3 v-show="onePage || currentStep === 3" @eventHandler3="someFunc()" :prop="someData3"/>
<Component_4 v-show="onePage || currentStep === 4" @eventHandler4="someFunc()" :prop="someData4" />
</div>
推荐阅读
- amazon-web-services - 如何将环境变量传递给 ECS 中未启动的容器
- wordpress - 我的 wordpress 网站上的商店页面出现严重错误
- pyspark - 获取 pyspark.sql.utils.ParseException: 在 pyspark sql 中的“in”处缺少“)”
- ruby-on-rails - Deep rails 即时嵌套属性
- java - OpenJDK cross-compilation couldn't find X11 libraries but packages are installed
- ubuntu - 无法在 Minikube 中创建 Pod
- android - The resource requested could not be found on this server! android studio
- apache-spark - spark-shell command throwing this error: SparkContext: Error initializing SparkContext
- firebase - FirebaseFirestoreSwift - 没有带有 SPM 的此类模块
- javascript - 错误:没有指定默认引擎,也没有提供扩展。快递