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();
    }
    
相关文章
|
6天前
|
JavaScript 前端开发
JS实现网页页面的框架(demo)
JS实现网页页面的框架(demo)
9 1
|
8天前
|
JavaScript UED
js得禁止页面滚动
js得禁止页面滚动
12 1
|
8天前
|
JavaScript 前端开发
js选取页面元素的方法
js选取页面元素的方法
13 2
|
14天前
|
开发框架 JavaScript 前端开发
【JavaScript 与 TypeScript 技术专栏】TypeScript 在 Web 开发中的前沿应用
【4月更文挑战第30天】TypeScript在Web开发中日益重要,以其强大的类型系统提升代码质量,支持组件化开发,与React、Vue、Angular等框架良好集成。在大型项目管理中,TypeScript助于代码组织和优化,提高团队协作效率。此外,它提升开发体验,提供智能提示和错误检测。众多成功案例证明其前沿应用,未来将在Web开发领域持续发挥关键作用。
|
14天前
|
JavaScript 前端开发 IDE
【JavaScript与TypeScript技术专栏】TypeScript在JavaScript库与框架开发中的作用
【4月更文挑战第30天】TypeScript,微软开发的JavaScript超集,以其强类型和面向对象特性,正成为提升Web项目质量和效率的关键工具,尤其在库和框架开发中。它通过类型系统减少运行时错误,提供内置文档,便于重构,增强IDE支持,以及支持模块化。流行框架如React、Angular已支持TypeScript,未来有望成为开发高质量库和框架的标准语言。随着社区增长,TypeScript将在Web开发领域扮演更重要角色。
|
14天前
|
JavaScript 前端开发 IDE
【TypeScript技术专栏】TypeScript与Node.js后端开发
【4月更文挑战第30天】TypeScript在Node.js后端开发中日益重要,作为JavaScript超集,它提供静态类型检查和面向对象编程,增强代码可靠性和维护性。集成TypeScript能带来类型安全、更好的IDE体验、易于维护的代码以及增强工具支持。通过安装TypeScript编译器、编写TypeScript文件、配置TSconfig,开发者可以在Node.js项目中利用其高级特性,提高代码质量和开发效率。实践案例显示,TypeScript能确保路由处理器的类型正确,降低错误率。随着社区发展,TypeScript成为提升Node.js开发体验的推荐选择。
|
14天前
|
JavaScript 前端开发 API
如何使用JavaScript进行桌面应用开发?
【4月更文挑战第30天】如何使用JavaScript进行桌面应用开发?
26 0
|
15天前
|
JavaScript
如何在JS中实现修改URL参数而不刷新页面
如何在JS中实现修改URL参数而不刷新页面
|
19天前
|
前端开发 JavaScript
js开发中的异步处理
JavaScript中的异步处理包括回调函数、Promise和async/await。回调函数是早期方法,将函数作为参数传递给异步操作并在完成后执行。Promise提供链式处理,通过resolve和reject管理异步操作的成功或失败。async/await基于Promise,允许写更简洁的同步风格代码,通过try-catch处理错误。Promise和async/await是现代推荐的异步处理方式。
|
20天前
|
缓存 JavaScript 前端开发
Vue.js 路由时用于提高应用程序性能
Vue.js 路由时用于提高应用程序性能