I'm using Vue and Vue Router in a SPA. In a view component I query a repository for a resource. If the resource is not found I want to show a 404 page whilst keeping the URL.
I.e. if I visit /foo/non-existant-id
then a 404 page should be shown in place of the show page for the foo
resource.
For clarity here is my router map:
router.map({
'/foo/:id': {name: 'foo-show', component: FooShowPage},
// Utilities
'/': { name: 'home', component: HomePage },
'*': { name: '404', component: NotFoundPage }
})
And in my FooShowPage
I do the following:
ready () {
// fetch the foo from the repo (app.foos)
app.foos.fetchById(this.$route.params.id).then(foo => {
this.foo = foo
}).catch(e => {
// foo is not found show a 404 page
// using this.$route.router.go({name: '404'}) does not work as route is a wildcard
console.warn(e)
})
}
Essentially it would probably involve replacing the FooShowPage
in the router view with NotFoundPage
, or redirecting to a defined 404 page whilst keeping the browser history untouched.