vue进阶/ 前端路由原理
前端路由
稍微复杂一点的SPA(singel page Web application:单页web应用), 都需要路由
spa的路由叫做前端路由,如果是后端路由就不是spa了,就是多页面应用了
1.vue-router的路由模式
1.1Hash
网页url组成部分
location // 位置 location.protocol // http 协议 location.hostname // ip地址 也可能是域名 location.host // ip地址带端口 location.port // 端口 location.pathname // 后面整个path部分 location.search // ?后面参数 ?id=1 location.hash // #后面一部分 #123i
通过hash变化触发路由的变化 。
2.hash的特点
hash变化触发网页跳转,即浏览器的前进和后退
2.hash变化不需要刷新页面 spa必须的特点
3.hash永远不会提交到server端(前端自生自灭)
创建的文件html 可以命令行
http-server -p 8001 //启动服务 我使用的启动失败
// 代码演示
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div>location</div>
    <button id='btn'></button>
    <script>
        var log = console.log.bind(console)
        window.onhashchange = (event) => {
            log('old url', event.oldURL)
            log('new url', event.newURL)
            log('hash', location.hash)
        }
        //页面初次加载,获取hash
        document.addEventListener('DOMContentLoaded', () => {
            log('load hash:', location.hash)
        })
        //js修改hash
        document.getElementById('btn').addEventListener('click', () => {location.href = '#/user'})
    
    </script>
</body>
</html>
// 改变hash的两种办法 1.js改变 2.手动改变
//hash值变化会改变浏览器的前进与后退
2.H5 history
特点1.用url规范的路由(和正常url一样 分不清前端后端路由) 且页面跳转不刷新页面
特点2. 使用 history.pushState window.onpopstate
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div>location</div>
    <button id='btn'></button>
    <script>
        var log = console.log.bind(console)
        
        //页面初次加载,获取hash
        document.addEventListener('DOMContentLoaded', () => {
            log('load :', location.pathname)
        })
       //打开一个新的路由
       //注意用 pushState方式 浏览器不会刷新页面
       document.getElementById('btn').addEventListener('click', function(e) {
           const state = {
               name: 'page1'
           }
           log('change router', 'page1')
           history.pushState(state, '', 'page1')
       })
       // 监听浏览器的前进与后退
       window.onpopstate = (e) => {
           console.log('onpopstate', e.state, location.pathname
           )
       }
    </script>
</body>
</html>
H5 history 是需要后端支持的
一般需要搜索引擎优化的才用 H5
    本人是一个技术爱好者
1.但是每个技术爱好者都是从萌新开始的
2.我所有的博文都是我各方资料查阅(看的比较乱比较杂,因为有些是群里讨论等等来源,无法辨别出处,所以我的文章都是没有写明出处,都是我个人消化后整理,)
3.但是没有经过我实践的我一般会标注
4.希望大家共同交流共同进步,指出我的不足 谢谢
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号