vue.js - 在运行时向 Vue 组件添加道具
问题描述
我尝试在 Vue 中创建一个高度动态的向导作为组件。它包含三个组件:Wizard组件本身、一个Step组件和一个单一表单“MyForm”组件。根据向导的当前步骤,表单可以处于编辑模式或只读模式。
经过一些试验和错误,我终于设法创建了这样一个组件并且它可以工作。我努力解决的一个问题是将信息从 Step 组件传递到子窗体组件是否处于编辑模式。
MyForm.vue
<template>
<form>
<div v-if="inEditMode"><i>Form is in edit mode</i></div>
<div v-else><i>Form is in read only mode</i></div>
</form>
</template>
<script>
import Vue from "vue";
export default Vue.extend({
props: ["inEditMode"]
// mixins: [wizardStepMixin],
});
</script>
精灵.vue
<Step>
<MyForm/>
</Step>
步骤.vue
<slot :isInEditMode="true"/>
像我上面所做的那样将道具传递/设置到插槽不起作用(道具没有改变)。
我在 MyForm 上设置 prop isInEdit的解决方案是在安装和更新 Step 之前在 Step 组件中调用函数prepareSlot 。
prepareSlot() {
this.$slots.default.forEach(element => {
if (!element.data) return
element.componentOptions.propsData = {
...element.componentOptions.propsData,
inEditMode: this.stepNr === this.currentStep
}
})
}
您可以在https://codesandbox.io/embed/mzr10wzk0j上找到完整的项目。
有没有更好的存档方法?这样做安全吗?
解决方案
推荐阅读
- javascript - 如何使用 Javascript/Jquery 自动刷新页面而不闪烁?
- java - 如何通过java jsoup从网页中检索准确的url
- reactjs - React-native - 世博会,在 twitter 上分享
- angularjs - 根据属性值过滤出数组对象 - AngularJS
- php - cookie 会在服务器 IP 更改时过期吗?
- vhdl - 模拟器和合成器初始化状态机的区别
- javascript - 在 Ionic 框架和 Parse-Server 中导出 CSV
- bootstrap-4 - 在引导程序中,4 个导航栏元素在小屏幕分辨率上低于其他元素
- javascript - 无法使用 js 滚动 div 溢出的按钮
- python - 有没有更好的方法来设置每行具有不同高度的不同列的图形?