美文网首页
M站单页面开发——hash路由的简单封装

M站单页面开发——hash路由的简单封装

作者: 鹤仔z | 来源:发表于2020-02-04 14:16 被阅读0次

使用路由的好处

不用刷新页面,用户体验好......

hash 路由的封装

  1. 路由的使用

    既然要封装,必须先知道要封装什么东西,所以要根据使用的方法来封装功能

    const router = new Router({
        // 路由的选择,本篇只封装hash路由
        mode: 'hash',
        // 路由表的配置
        routes: [
            {
                path: '/',
                template: home
            },
            {
                path: '/list',
                template: list
            }
        ]
    })
    
    window.router = router;
    
  2. hash路由的实现

    class Router {
        constructor(options) {
    
            //路由配置项/参数
            this.$options = options;
    
            //路由的形式  当用户传递了路由的形式就用用户传递过来的  如果没有则默认是hash
            this.$mode = this.$options.mode || 'hash';
    
            // 路由表
            this.$routes = this.$options.routes || [];
    
            // 定义初始的hash值
            this.current = '/';
    
            // 路由表对象
            this.mapRoutes = {};
    
            // 定义路由传值的对象(?之后的参数)
            this.$route = {
                query: {},
                path: '/'
            }
    
            this.init();
        }
    
        init() {
            // 0、定义hash路由
            window.location.href = window.location.origin + '#/';
            // 1、处理路由表对象
            this.mapRoutesHandler();
            // 2、监听路由变化的事件
            this.bindEvent();
            // 3、渲染对应的页面
            this.render();
        }
    
        // 处理参数中的路由表
        mapRoutesHandler() {
            this.$routes.forEach(item => {
                this.mapRoutes[item.path] = item;
            });
        }
    
        // 监听路由变化的事件
        bindEvent() {
            window.addEventListener("load", this.hashchangeHandler.bind(this))
            window.addEventListener("hashchange", this.hashchangeHandler.bind(this));
        }
    
        // 路由变化的回调
        hashchangeHandler() {
            // 获取hash值
            let hash = window.location.hash.split('?')[0].slice(1) || "/";
            this.current = hash;
            // 获取query传值
            this.getQuery();
            // 渲染页面
            this.render();
        }
    
        // 渲染页面
        render() {
            let template = this.mapRoutes[this.current].template;
            template.render();
        }
    
        // 获取地址?后的参数并转化为对象
        getQuery() {
            let href = window.location.href;
            let obj = href.substr(href.indexOf("?") + 1).split("&").reduce((prev, item) => {
                let key = item.split("=")[0];
                let val = item.split("=")[1];
                prev[key] = val;
                return prev;
            }, {})
            this.$route.query = obj;
        }
    
        // 路由跳转方法
        push(path) {
            window.location.hash = path;
        }
    }
    

相关文章

  • M站单页面开发——hash路由的简单封装

    使用路由的好处 不用刷新页面,用户体验好...... hash 路由的封装 路由的使用既然要封装,必须先知道要封装...

  • Vue、React前端项目打包部署

    前端单页面应用部署 前端打包上线部署方案之 hash路由模式 对于hash路由模式打包的单页面应用,直接发布到服务...

  • 2021-11-28

    面试问题汇总 h5路由与hash路由区别(单页面应该程序) hash路由 1、hash变化会触发页面跳转,即浏览器...

  • Vue 路由模式切换

    路由切换模式:{hash/ history} 对于Vue 这类渐进式前端开发框架,为了构建SPA(单页面应用),...

  • Router 原理及 React-Router

    页面路由(浏览器路由) 页面会刷新 hash路由 页面不会刷新,之前做单页应用,使用的传统方法。 h5 路由 h5...

  • vue路由的两种模式

    hash与history 对于Vue 这类渐进式前端开发框架,为了构建SPA(单页面应用),需要引入前端路由系...

  • 【vue-cli】路由模式

    1. 概念 路由模式包括 hash模式和history 模式 1.1 hash模式 单页面应用中vue-route...

  • SPA路由原理及实现

    单页面应用中的路由分为两种: hash模式和history模式 1. hash模式 比如 https://www....

  • 路由

    一 、路由 一 路由是什么?对于单页面应用程序来说,主要通过URL中的 hash(#号) 来实现不同页面之间的切换...

  • 微信公众号底部自定义菜单栏链接在spa项目上的分享问题

    问题如图: 出现在vue,angular, react等单页面应用项目上,单页面应用路由用的hash, 而分享时微...

网友评论

      本文标题:M站单页面开发——hash路由的简单封装

      本文链接:https://www.haomeiwen.com/subject/qiurxhtx.html