js -基于SPA的单页面路由 的组件化开发

简介: 大部分用于: 移动端 / PC端的后台管理系统

代码升级(组件化开发)

  1. index.html

    <div id="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>
    
    *{
         
        margin: 0;
        padding: 0;
    }
    html,body,#box{
         
        width: 100%;
        height:100%;
    }
    #box{
         
        display: flex;
        flex-direction:column;
    }
    #box>.top{
         
        height: 130px;
        background: skyblue;
    }
    #box>.bottom{
         
        flex:1;
        display: flex;
    }
    #box>.bottom>.slide{
         
        width: 230px;
        background-color: orange;
        box-sizing: border-box;
        padding: 15px;
    }
    #box>.bottom>.slide>a{
         
        font-size: 22px;
        display: block;
        margin: 10px 0;
        text-decoration: none;
        color: #333;
    }
    #box>.bottom>.content{
         
        flex: 1;
        box-sizing: border-box;
        padding: 15px;
        background: purple;
        font-size: 100px;
        color: white
    }
    
    <script src="./index.js" type="module"></script>
    
  1. components 组件

    • first.js

      //组件的html结构
      const template = `
          <div id="first">
              first
          </div>
      `;
      //获取到路由出口对象
      const routerView = document.querySelector('.router-view');
      //准备一个渲染函数
      function render(){
             
          routerView.innerHTML = template;
      }
      //导出渲染函数
      export default render;
      
    • second.js

      //组件的html结构
      const template = `
          <div id="second">
              second
          </div>
      `;
      //获取到路由出口对象
      const routerView = document.querySelector('.router-view');
      //准备一个渲染函数
      function render(){
             
          routerView.innerHTML = template;
      }
      //导出渲染函数
      export default render;
      
    • third.js

      //组件的html结构
      const template = `
          <div id="third">
              third
          </div>
      `;
      //获取到路由出口对象
      const routerView = document.querySelector('.router-view');
      //准备一个渲染函数
      function render(){
             
          routerView.innerHTML = template;
      }
      //导出渲染函数
      export default render;
      
  • fourth.js

    //组件的html结构
    const template = `
        <div id="fourth">
            fourth
        </div>
    `;
    //获取到路由出口对象
    const routerView = document.querySelector('.router-view');
    //准备一个渲染函数
    function render(){
         
        routerView.innerHTML = template;
    }
    //导出渲染函数
    export default render;
    
  1. router.js

    //导入组件模块
    import firstCom from './components/first.js';
    import secondCom from './components/second.js';
    import thirdCom from './components/third.js';
    import fourthCom from './components/fourth.js';
    // 定义路由表
    const router = [
        {
         
            name : '/first',
            component: firstCom
        },
        {
         
            name: '/second',
            component: secondCom
        },
        {
         
            name: '/third',
            component: thirdCom
        },
        {
         
            name: '/fourth',
            component: fourthCom
        }
    ];
    //导出路由
    export default router;
    
  1. index.js

    //1. 导入路由表
    import router from './router.js';
    //2. 注册hashchange 事件
    window.onhashchange = hashChange;
    hashChange();
    //3. 处理程序
    function hashChange(){
         
        console.log('根据当前hash值,进行改变');
        //获取当前的hash值
        const hash = window.location.hash.slice(1) || '/';
        // console.log(hash);
        //从路由表中找到hash对应的那一个信息
        const info = router.find(item => item.name === hash);
        console.log(info);
        //如果没有内容,不需要后续操作
        if(!info){
         
            return;
        }
        //渲染页面
        info.component();
    }
    
相关文章
|
13天前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
257 1
|
18天前
|
JavaScript 前端开发 安全
TypeScript的优势与实践:提升JavaScript开发效率
【10月更文挑战第8天】TypeScript的优势与实践:提升JavaScript开发效率
|
18天前
|
JavaScript 前端开发 IDE
深入理解TypeScript:提升JavaScript开发的利器
【10月更文挑战第8天】 深入理解TypeScript:提升JavaScript开发的利器
27 0
|
4天前
|
开发框架 JavaScript 前端开发
HarmonyOS UI开发:掌握ArkUI(包括Java UI和JS UI)进行界面开发
【10月更文挑战第22天】随着科技发展,操作系统呈现多元化趋势。华为推出的HarmonyOS以其全场景、多设备特性备受关注。本文介绍HarmonyOS的UI开发框架ArkUI,探讨Java UI和JS UI两种开发方式。Java UI适合复杂界面开发,性能较高;JS UI适合快速开发简单界面,跨平台性好。掌握ArkUI可高效打造符合用户需求的界面。
23 8
|
2天前
|
JavaScript 前端开发 数据可视化
哪些 JS 框架支持 SPA 单页面应用
目前主流的JavaScript框架如React、Vue和Angular都支持SPA(单页面应用)开发,能够实现页面无刷新更新,提升用户体验。其他如Ember.js、Backbone.js等也具备SPA开发能力。
|
2天前
|
JavaScript 前端开发
javascript开发的简单的弹幕插件
这是一个原生javascript开发的简单的弹幕插件,具有美观、易用,占用的资源较低等特点,可以给弹幕设置内容、颜色、头像、链接地址等属性,鼠标悬停等,简单实用,欢迎下载!
18 5
|
19天前
|
Web App开发 存储 JavaScript
深入浅出Node.js后端开发
【10月更文挑战第7天】本文将带你进入Node.js的世界,从基本概念、环境搭建到实际案例,逐步深入探索Node.js在后端开发中的应用。我们将通过一个简单的在线聊天室项目,学习如何利用Node.js进行网络编程和数据处理,让你对Node.js有更全面的认识。
16 3
|
21天前
|
JavaScript
Node.js 路由
10月更文挑战第5天
12 2
|
20天前
|
JavaScript 前端开发 IDE
利用TypeScript增强JavaScript开发
【10月更文挑战第5天】TypeScript作为JavaScript的超集,通过添加静态类型系统和对ES6+特性的支持,解决了大型项目中常见的类型错误和代码维护难题。本文介绍TypeScript的核心优势,包括静态类型检查、现代JS特性支持及更好的IDE支持,并探讨如何逐步将其集成到现有项目中,提升开发效率和代码质量。通过使用DefinitelyTyped库和装饰器等功能,开发者可以更轻松地编写可靠且可维护的代码。希望本文能帮助你更好地理解和应用TypeScript。
|
13天前
|
存储 JSON JavaScript
Vue.js开发中基于localStorage与sessionStorage的本地存储利器:Vue-ls插件使用详解
Vue.js开发中基于localStorage与sessionStorage的本地存储利器:Vue-ls插件使用详解
31 0