Open dm-de opened 4 years ago
I have come across the same issue.
😞 🐼
Do it:
page('/', () => {
page.redirect('/page/1')
})
page('/notfound', console.log)
page('/page/:number', console.log)
page('*', ctx => {
if (/^(\/\/)/.test(ctx.path)) {
page.redirect(ctx.path.slice(1, ctx.path.length))
} else {
page.show('/notfound')
}
})
page.start({hashbang: true})
That workaround avoid the problem! If you try set the URL via external link or using navigator address bar, will work!!
hashbang mode is broken it do not accept valid changes and return '*' route
output context object:
canonicalPath: "/#!/user/100" hash: "" page: Object { current: "//user/100", len: 2, _decodeURLComponents: true, … } params: Object { 0: "//user/100", path: "/#!/user/100", query: "" } path: "//user/100" pathname: "/#!/user/100" querystring: "" routePath: "(.*)" state: Object { path: "/#!/user/100" } title: "app" : Object { pushState: pushState(), save: save(), … }
As you can see - here is double slash at path - so it can never be correct after hash change - and only '*' ist valid
I was able to fix this: @ function Context(path, state, pageInstance)
if (hashbang) this.path = this.path.replace('#!', '') || '/'; change to: if (hashbang) this.path = this.path.replace('/#!', '') || '/';
But i do not know if this has other sideeffects