Skip to content

Commit

Permalink
fix(match): use pathMatch for the param of * routes (#1995)
Browse files Browse the repository at this point in the history
* fix(match): use fullPath for the param of * routes

Fix #1994
Combining an asterisk route (*) with props: true would result in an
error because the name of the param would be the number 0 making it an
invalid attribute + the fact that vue passes props as attributes
if they're not declared as props

* test(match): add test for asterisk route with props: true

* refactor(match): use pathMatch instead of fullPath for unnamed params
  • Loading branch information
posva authored Jul 2, 2018
1 parent 169a5a6 commit ca1fccd
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 4 deletions.
3 changes: 2 additions & 1 deletion src/create-matcher.js
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,8 @@ function matchRoute (
const key = regex.keys[i - 1]
const val = typeof m[i] === 'string' ? decodeURIComponent(m[i]) : m[i]
if (key) {
params[key.name] = val
// Fix #1994: using * with props: true generates a param named 0
params[key.name || 'pathMatch'] = val
}
}
Expand Down
6 changes: 3 additions & 3 deletions test/e2e/specs/route-matching.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ module.exports = {
route.matched[0].path === '/asterisk/*' &&
route.fullPath === '/asterisk/foo' &&
JSON.stringify(route.params) === JSON.stringify({
0: 'foo'
pathMatch: 'foo'
})
)
}, null, '/asterisk/foo')
Expand All @@ -96,7 +96,7 @@ module.exports = {
route.matched[0].path === '/asterisk/*' &&
route.fullPath === '/asterisk/foo/bar' &&
JSON.stringify(route.params) === JSON.stringify({
0: 'foo/bar'
pathMatch: 'foo/bar'
})
)
}, null, '/asterisk/foo/bar')
Expand All @@ -120,7 +120,7 @@ module.exports = {
route.matched[0].path === '/optional-group/(foo/)?bar' &&
route.fullPath === '/optional-group/foo/bar' &&
JSON.stringify(route.params) === JSON.stringify({
0: 'foo/'
pathMatch: 'foo/'
})
)
}, null, '/optional-group/foo/bar')
Expand Down
6 changes: 6 additions & 0 deletions test/unit/specs/create-matcher.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { createMatcher } from '../../../src/create-matcher'
const routes = [
{ path: '/', name: 'home', component: { name: 'home' }},
{ path: '/foo', name: 'foo', component: { name: 'foo' }},
{ path: '*', props: true, component: { name: 'notFound' }}
]

describe('Creating Matcher', function () {
Expand Down Expand Up @@ -32,4 +33,9 @@ describe('Creating Matcher', function () {
match({ name: 'foo' }, routes[0])
expect(console.warn).not.toHaveBeenCalled()
})

it('matches asterisk routes with a default param name', function () {
const { params } = match({ path: '/not-found' }, routes[0])
expect(params).toEqual({ pathMatch: '/not-found' })
})
})

0 comments on commit ca1fccd

Please sign in to comment.