第三十章 单页面应用程序(SPA)

一、SPA

1、含义:SPA: single page application。指的是一个网站里面只有一个页面 , 但是里面的内容不少。

  • 配套一个入口文件 , 比如叫做: index.html 就组成了一个网站

  • 类似选项卡的一种状态、大部分用于移动端 / PC端的后台管理系统

2、切换方式

  • 形式1: 依赖于 hash 值的改变(锚点)

        =>这种形式比较简单 , 不需要依赖于服务器

  • 形式2: 依赖于历史记录(history)

        =>需要依赖服务器 , 改的是服务器的地址信息

二、认识单页面应用

1、捕获hash内容,来显示不同的内容

  • 语法:window.location.hash
  • 返回值: 改地址栏内的hash值 , 也就是锚点值

2、hashchange 事件

  • 触发时机: 当当前地址栏中的 hash 值发生改变的时候触发
  • 这个事件应该绑给window , 因为是浏览器窗口中的内容发生了改变

3、确认一个路由出口

  •  就是在页面上标记一个标签 , 将来所有的路由内容渲染在该标签内部
  • 类名为 router-view 的标签 表示我们的路由出口
    <div class="box">
        <div class="top">顶部通栏</div>
        <div class="bottom">
            <div class="slide">
                <a href="#/first">first</a>
                <a href="#/second">second</a>
                <a href="#/third">third</a>
                <a href="#/fourth">fourth</a>
            </div>
            <div class="content router-view">
                <!-- 路由出口标签, 将来切换路由的时候, 所有显示的结构都插入到这个标签内部 -->
            </div>
        </div>
      </div>
        // 确认所有的路由结构
        const template1 = `<div>first</div>`
        const template2 = `<div>second</div>`
        const template3 = `<div>third</div>`
        const template4 = `<div>fourth</div>`

        // 第零步: 获取元素 , 就是获取路由入口标签
        const routerView = document.querySelector('.router-view')

        // 第一步: 我们要捕获浏览器地址栏 hash 值的改变
        // console.log(window.location.hash);
        // 绑定事件 
        window.onhashchange = function () {
            // console.log('地址栏 hash 值改变了 :',window.location.hash);
            // 判断之前我们先拿到 hash 值
            const { hash } = window.location
            // 上面我们可以拿到 hash 值了  我们只要判断 hash 值 , 进行不同页面结构的渲染就可以了
            if (hash === '#/first') {
                routerView.innerHTML = template1
            } else if (hash === '#/second') {
                routerView.innerHTML = template2
            }  else if (hash === '#/third') {
                routerView.innerHTML = template3
            } else if (hash === '#/fourth') {
                routerView.innerHTML = template4
            }
        }

三、懒加载设置

1、目的:实现路由懒加载,在这个路由文件中不在使用同步导入文件了

2、问题:不在使用同步导入文件之后,路由表没有产生相对应的问题

3、解决办法:后面跟一个函数,当路由器切换到它的时候,执行这个函数

4、异步导入文件

  • 语法: import('地址')
  • 这个是按照 promise 的语法来封装的函数
  • 但是这个时候没有内容显示
  • 返回值不是该地址内导出的内容 , 而是一个 promise 对象
  • 需要通过then()来拿到结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值