实现简单路由
上面实现了简易的 hash 路由, 也可以使用 history 的 pushState 和监听 popState 事件即可
- https://developer.mozilla.org/zh-CN/docs/Web/API/Window/popstate_event
- https://developer.mozilla.org/zh-CN/docs/Web/API/History/pushState
const A = { render() { return 'AAA' } } class Router { routes = new Map() route = { path: '/' } routeView = null constructor(el) { this.routeView = el this.init() } init() { window.addEventListener('hashchange', () => { this.routeTo() }) window.addEventListener('load', () => { this.routeTo() }) } push(path) { location.hash = `#${path}` } add(routeName, component) { this.routes.set(routeName, component) } routeTo() { this.route.path = location.hash.slice(1) || '/' const component = this.routes.get(this.route.path) console.log({component}) const app = this.routeView if (component) { app.innerHTML = component.render() } else { app.innerHTML = `<h1>404 Not Found</h1>`; } } } const router = new Router(document.querySelector('body')) router.add('/a', A) router.push('/a') console.log(router.route)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
更多
发布评论