问题:vue如何在父路由中调用子路由的方法
思路:
- 由父路由emit信号给子路由
- 由子路由接收对应信号
- 子路根据信号规则去使用自己的相应的方法
具体实现:有需要的可以直接粘贴到测试页面,就可以看见效果了。
<div id="app">
<button v-on:click="sonClick">父亲触发儿子事件的按钮</button>
<button v-on:click="daughterClick">父亲触发女儿事件的按钮</button>
<router-link to="/son" tag="div"></router-link>
<router-view></router-view>
</div>
<template id="son">
</template>
<script type="text/javascript">
var son={
template: '#son',
methods: {
sonClick : function(){
alert("儿子事件被父亲触发了");
},
daughterClick : function(param1, param2, param3){
alert("女儿事件被父亲触发了。参数1为" + param1 +"参数2为" + param2 +"参数三为" + param3);
}
},
mounted: function(){
/*
第三步.这里接收了sonCome这个信号,并触发了子组件中的sonClick方法.
不可以写成this.sonClick().这样不仅达不到效果,还会在初始化的时候直接触发方法
*/
this.$root.eventHub.$on("sonCome", this.sonClick);
/*
第三步.这里接收了daughterCome这个信号,并触发了子组件中的daughterClick方法
这里接收到的parm1,param2,param3就是前面传信号过来的时候依次写好的三个参数
*/
this.$root.eventHub.$on("daughterCome", (param1, param2, param3)=>{
this.daughterClick(param1, param2, param3);
});
}
};
var router=new VueRouter({
routes:[
{path:'/',redirect:'/son'},
{path:'/son',component:son}
]
});
var vm=new Vue({
el:'#app',
data:{
/*
第一步.先创建一个eventHub,必要的步骤。绝对不可省略
*/
eventHub: new Vue()
},
methods:{
sonClick() {
/*
第二步.发送一个sonCome的信号,这是无参的类型
*/
this.$root.eventHub.$emit("sonCome");
},
daughterClick() {
/*
第二步.发送一个daughterCome的信号,参数就依次写下去即可
*/
this.$root.eventHub.$emit("daughterCome", 1, 2, 3);
}
},
router:router
});
</script>