mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-27 16:12:12 +00:00
fix dynamic routes
This commit is contained in:
parent
2fff5e7a4f
commit
b33008ee88
@ -198,15 +198,23 @@ function createRoutes (files, srcDir) {
|
|||||||
let route = { name: '', path: '', component: r(srcDir, file), _name: null }
|
let route = { name: '', path: '', component: r(srcDir, file), _name: null }
|
||||||
let parent = routes
|
let parent = routes
|
||||||
keys.forEach((key, i) => {
|
keys.forEach((key, i) => {
|
||||||
route.name = route.name ? route.name + (key === 'index' ? '' : '-' + key.replace('_', '')) : key.replace('_', '')
|
route.name = route.name ? route.name + '-' + key.replace('_', '') : key.replace('_', '')
|
||||||
let child = _.find(parent, { name: route.name })
|
let child = _.find(parent, { name: route.name })
|
||||||
if (child) {
|
if (child) {
|
||||||
if (!child.children) {
|
if (!child.children) {
|
||||||
child.children = []
|
child.children = []
|
||||||
}
|
}
|
||||||
parent = child.children
|
parent = child.children
|
||||||
|
route.path = ''
|
||||||
} else {
|
} else {
|
||||||
route.path = route.path + (key === 'index' ? (i > 0 ? '' : '/') : '/' + key.replace('_', ':'))
|
if (key === 'index' && (i + 1) === keys.length) {
|
||||||
|
route.path += (i > 0 ? '' : '/')
|
||||||
|
} else {
|
||||||
|
route.path += '/' + key.replace('_', ':')
|
||||||
|
if (key.includes('_')) {
|
||||||
|
route.path += '?'
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
route._name = '_' + hash(route.component)
|
route._name = '_' + hash(route.component)
|
||||||
@ -222,15 +230,22 @@ function createRoutes (files, srcDir) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function cleanChildrenRoutes (routes, isChild = false) {
|
function cleanChildrenRoutes (routes, isChild = false) {
|
||||||
let isOptional = true
|
let hasIndex = false
|
||||||
|
let parents = []
|
||||||
routes.forEach((route) => {
|
routes.forEach((route) => {
|
||||||
route.path = (isChild) ? route.path.replace('/', '') : route.path
|
route.path = (isChild) ? route.path.replace('/', '') : route.path
|
||||||
if (route.path === '' || route.path === '/') {
|
if ((isChild && /-index$/.test(route.name)) || (!isChild && route.name === 'index')) {
|
||||||
isOptional = false
|
hasIndex = true
|
||||||
}
|
}
|
||||||
if (isOptional && route.path.includes(':')) {
|
route.path = (hasIndex) ? route.path.replace('?', '') : route.path
|
||||||
route.path += '?'
|
if (/-index$/.test(route.name)) {
|
||||||
|
parents.push(route.name)
|
||||||
|
} else {
|
||||||
|
if (parents.indexOf(route.name.split('-').slice(0, -1).join('-') + '-index') > -1) {
|
||||||
|
route.path = route.path.replace('?', '')
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
route.name = route.name.replace(/-index$/, '')
|
||||||
if (route.children) {
|
if (route.children) {
|
||||||
delete route.name
|
delete route.name
|
||||||
route.children = cleanChildrenRoutes(route.children, true)
|
route.children = cleanChildrenRoutes(route.children, true)
|
||||||
|
Loading…
Reference in New Issue
Block a user