我有一个具有不同步骤的表单,它们都共享相同的标题结构。
不同步骤中标题的唯一区别是标题中的措辞随步骤而变化。
我正在寻找这样做的方法:
在我的vue路由器中:
path: '/form',
name: 'Form',
component: Form,
children: [
{
path: 'step1',
component: FormStep1,
propsForParent: {
title: "myTitle In Header In Form Component"
},
},
{
path: 'step2',
component: FormStep2,
propsForParent: {
title: "myTitle is different In Header In Form Component"
},
}
]
因此,当路由为form/step1时,我希望我的表单组件接收在我的子配置中设置的标题道具,如上所述,依此类推。
我希望避免在父组件中管理这些信息,也希望避免我的孩子将这些信息与事件(例如与父组件或使用vuex)进行通信。我正在vue路由器中直接搜索一些好东西。
任何想法?
可以稍微改进一下,以更优雅的方式实现它。
像哑炮一样。如上所述,我们可以在每个子组件中发出childinit
,每次在子组件中编写发出的东西都会很乏味。
然而,我们可以使用mixin来解决这个问题。我们编写了一个mixin,该mixin使用其道具发出childinit
,并在每个子组件中导入和使用该mixin。
// mixin
export default {
props: {
title: {
type: String,
default: '',
},
},
created() {
this.$emit('childinit', this.title)
},
}
// parent
<template>
<div class="wrapper">
<router-view @childinit="childInit"/>
</div>
</template>
<script>
export default {
data() {
return {
title: '',
}
},
methods: {
childInit(title) {
this.title = title
},
},
}
</script>
// child
<script>
import TitleMixin from './mixins'
export default {
mixins: [TitleMixin],
}
</script>
您就快到了,只需将收到的道具值从子对象发射到父对象。
path: '/form',
name: 'Form',
component: Form,
children: [
{
path: 'step1',
component: FormStep1,
props: {
title: "myTitle In Header In Form Component"
},
},
{
path: 'step2',
component: FormStep2,
props: {
title: "myTitle is different In Header In Form Component"
},
}
]
//Inside FormStep2 and FormStep1
created() {
this.$emit('childinit', this.title);
},
//inside Form
methods: {
onChildInit( value ){
this.title = value;
}
}
为了使事情变得更干净,考虑在路由器中创建另一层的孩子,这样你就不必在每个孩子身上发射。这是我现在正在看的一个项目的一些代码,它做了一些非常类似的事情,请注意我正在传递的step prop。
//在我的timelineBase组件中,我监听onChildInit,设置一个从子级获取值的方法,然后在布局中使用该方法来告诉pageStepper我在哪个部分。
<router-view v-on:childinit="onChildInit" :key="componentKey"></router-view>
<pageStepper :step="pageStepper"></pageStepper>
//代码有这些道具。道具:['mode'、'step'、'componentKey'],
这是我的路线。
const router = new VueRouter({
routes: [
{
path: '/',
component: Layout,
children: [
{
path: '',
component: homepage,
props: { cssClass: '' },
},
{
name: 'addTimeline',
path: 'timeline',
props: { mode:'add', step: 1, componentKey: 0 },
component: timelineBase,
children:
[
{
path: 'add',
component: timeline,
props: { mode:'add', step: 1, componentKey: 1},
},
{
name: 'updateTimeline',
path: ':id/update',
component: timeline,
props: { mode:'update', step: 1, componentKey: 2 }
},
{
name: 'addEvent',
path: ':id/event/add',
component: addevent,
props: { mode:'add', step: 2, componentKey: 3 }
},
{
name: 'editEvent',
path: ':id/event/edit/:event_id',
component: editevent,
props: { mode:'update', step: 2, componentKey: 4 }
},
{
name: 'previewTimeline',
path: ':id/preview',
component: preview,
props: { step: 3, componentKey: 5 }
},
]
},
]
}
]
});
使用路由元数据:
path: '/form',
name: 'Form',
component: Form,
children: [
{
path: 'step1',
component: FormStep1,
meta: {
title: "myTitle In Header In Form Component"
},
},
{
path: 'step2',
component: FormStep2,
meta: {
title: "myTitle is different In Header In Form Component"
},
}
]
然后在父组件中:
computed: {
title () { this.$route.meta.title }
}
如果希望将标题作为道具传递给父组件,请使用:
routes: [{
path: '/form',
name: 'Form',
component: Form,
props (route) => {
return {
title: route.meta.title
}
}
children: [ ...
您还可以使标题可继承。为此,您需要使用更复杂的检查:
const matched = route.matched.slice().reverse().find(route => route.meta.title)
matched.meta.title
注意:slice()。
我无法使用反应路由器通过道具。我到现在为止的代码: 错误截图 我正试图访问控制台中的id,就这么简单。 错误仅在我尝试传递道具时显示 源链接:https://reacttraining.com/react-router/web/api/Route/route-props
我正在使用react路由器dom v5。反应v16中的2.0。13.1项目中,我使用静态路由将道具从父组件传递到子组件,父组件从其父组件(即祖父)接收道具。从应用程序。js-
我有一个模态,我想在其中放置一个动态嵌套视图。我认为这样做的一个好方法是像这样使用 我想把一些道具传给这些组件,就像我平时在React中一样 最终,我将移动到存储/获取状态中的这些属性,但是考虑到当前的实现,在定义开关
我在一个组件中有一个按钮,单击我想转到另一个组件并将状态传递给该组件。 是这样的: 但它不起作用。单击“我去添加新问题url”,但组件AddNewQuestionPage不会呈现。若我不把路线放在AddQuestions组件中,而是放在应用程序组件中,它就可以工作。它是整个应用程序的主要组件,使用Switch,还设置了其他路由。 但是,如果状态问题是从应用程序组件呈现的,我不知道如何将其传递给Ad
我在使用Vue路由器将数据从一个组件传递到另一个组件时遇到问题。 我在主组件中有此模板: 在我的组件中,我有以下数据功能: 第二个链接将发送到名为的组件。 如何将数据从传递到,然后显示在那里? 谢谢
我试图使用react router将props从app.jsx传递到某个路由组件,但出现以下错误