Vuejs - 如何将参数从子路由传递到父路由?
Vuejs - How to pass params from child route to parent route?
我是vuejs的初学者。
我对 vue-router 嵌套路由的一些实践有疑问。
以防万一,这是一个嵌套的路由配置。
const router = new Router({
routes: [
{
path: '/dashboard',
name: 'dashboard',
component: Dashboard,
meta: {
requiresAuth: true
},
children: [
{
path: 'overview',
name: 'Overview',
component: Overview,
meta: {
requiresAuth: true
}
}
]
}
]
})
如果我想将数据从子路由(概览)传递到父路由(仪表板)
我该如何处理?
我不希望 url 有任何变化 (/dashboard/overview),只是从子路由接收数据参数。
您可能想考虑使用 Vuex 作为跨不同组件共享状态的方式(如果您是初学者,则可能不会)。
或者,您可以只在子组件中发出一个事件:
Vue.use(VueRouter);
var Parent = {
template: '<router-view @data="onData"></router-view>',
methods: {
onData(data) {
alert('Got data from child: ' + data);
},
},
};
var Child = {
template: '<div><input v-model="text"><button @click="onClick">Click Me</button></div>',
data() {
return {
text: 'Hello',
};
},
methods: {
onClick() {
this.$emit('data', this.text);
},
},
};
var router = new VueRouter({
routes: [
{
path: '',
component: Parent,
children: [
{
path: '',
component: Child,
},
],
},
],
});
new Vue({
el: '#app',
router,
});
<script src="https://rawgit.com/vuejs/vue/dev/dist/vue.js"></script>
<script src="https://rawgit.com/vuejs/vue-router/dev/dist/vue-router.js"></script>
<div id="app">
<router-view></router-view>
</div>
我是vuejs的初学者。
我对 vue-router 嵌套路由的一些实践有疑问。
以防万一,这是一个嵌套的路由配置。
const router = new Router({
routes: [
{
path: '/dashboard',
name: 'dashboard',
component: Dashboard,
meta: {
requiresAuth: true
},
children: [
{
path: 'overview',
name: 'Overview',
component: Overview,
meta: {
requiresAuth: true
}
}
]
}
]
})
如果我想将数据从子路由(概览)传递到父路由(仪表板)
我该如何处理?
我不希望 url 有任何变化 (/dashboard/overview),只是从子路由接收数据参数。
您可能想考虑使用 Vuex 作为跨不同组件共享状态的方式(如果您是初学者,则可能不会)。
或者,您可以只在子组件中发出一个事件:
Vue.use(VueRouter);
var Parent = {
template: '<router-view @data="onData"></router-view>',
methods: {
onData(data) {
alert('Got data from child: ' + data);
},
},
};
var Child = {
template: '<div><input v-model="text"><button @click="onClick">Click Me</button></div>',
data() {
return {
text: 'Hello',
};
},
methods: {
onClick() {
this.$emit('data', this.text);
},
},
};
var router = new VueRouter({
routes: [
{
path: '',
component: Parent,
children: [
{
path: '',
component: Child,
},
],
},
],
});
new Vue({
el: '#app',
router,
});
<script src="https://rawgit.com/vuejs/vue/dev/dist/vue.js"></script>
<script src="https://rawgit.com/vuejs/vue-router/dev/dist/vue-router.js"></script>
<div id="app">
<router-view></router-view>
</div>