Вам понадобятся 2 вещи
Чтобы передать свойство компонентам, чтобы узнать текущее значение шага
Для генерациисобытие от каждого компонента, поэтому родительский компонент получит уведомление о новом значении, что шаг должен быть обновлен
Я напишу код ниже и дам объяснение позже
Вашhtml
<div id="app">
</div>
Родительский компонент
var instance = new Vue({
el:'#app',
data:{
step:1
},
methods:{
stepChanged:function(step){
alert('Moving to step:'+step);
this.step = step;
}
},
template:`
<div>
<app-stepone v-if="step==1" v-on:stepChanged="stepChanged" :step="step" >
</app-stepone>
<app-steptwo v-if="step==2" v-on:stepChanged="stepChanged" :step="step" >
</app-steptwo>
<app-stepthree v-if="step==3" v-on:stepChanged="stepChanged" :step="step">
</app-stepthree>
</div>
`
});
Компонент шага 1
Vue.component('app-stepone',{
props:['step'],
data:function(){
return {};
},
methods:{
moveStep(){
this.$emit('stepChanged',2)
}
},
template:`<div>We are in Step 1 - {{step}}<br /><button v-
on:click="moveStep()">Move to Step 2</button></div>`
});
Компонент шага 2
Vue.component('app-steptwo',{
props:['step'],
data:function(){
return {};
},
methods:{
moveStep(){
this.$emit('stepChanged',3)
}
},
template:`<div>We are in Step 2 - {{step}}<br /><button v-
on:click="moveStep">Move to Step 3</button></div>`
});
Компонент шага 3
Vue.component('app-stepthree',{
props:['step'],
data:function(){
return {};
},
methods:{
moveStep(){
this.$emit('stepChanged',1)
}
},
template:`<div>We are in Step 3 - {{step}}
<br />
<button v-on:click="moveStep">Move to first step</button>
</div>`
});
Каждый компонент может получить свойство step от родительского элемента, просто передав ему имя: step = "step" и зарегистрировав props: ['step'] в каждом компоненте app-step и затем внутрикомпонент шага, вы можете использовать это свойство и знать текущее значение (в текущем примере я его не использую, но я показываю, как вы можете его получить) Каждый компонент после того, как он выполнит свой расчет или какова бы ни была ваша бизнес-логика, может выдатьродитель измененияэто хотел бы быть примененным для шага.Компонент должен уведомить родителя, выполнив эту команду this.$emit('stepChanged','<value of the step>')
.Чтобы родительский компонент прослушал изменение, он должен зарегистрировать для каждого компонента обработчик с именем 'stepChanged' и метод, который будет называться