问题
According to this official example, we have the ability to add nested/children routes in vuejs. But I cannot find any help/docs around a way to add these children routes dynamically. e.g only add child routes when Parent route is visited.
Currently all the routes in a Vue application are defined in a single place where we create Router instance. There is an api called addRoutes, but I don't know how to use that to add lazily loaded features of application along side their routes. If someone is familiar with Angular2+ Module system, that has this ability to define routes for the feature modules inside that module and even make them lazily loaded. Wondering if something could be achieved with VueJs?
回答1:
You can use $router.addRoutes
to re-add a route, specifying children.
You'll need to get the current route definition (as opposed to the $route
object) by searching the $router.options.routes
array for the route definition object that matches the current $route.path
. Then add a children
array of route definitions to the object and pass it to $router.addRoutes
.
created() {
let { routes } = this.$router.options;
let routeData = routes.find(r => r.path === this.$route.path);
routeData.children = [
{ path: 'bar', component: Bar },
{ path: 'baz', component: Baz },
];
this.$router.addRoutes([routeData])
}
Here's an example fiddle of dynamically adding child routes in the created hook of a route's component definition.
来源:https://stackoverflow.com/questions/48832181/dynamically-add-child-routes-in-vuejs