拆解与重构:慕云游首页组件化设计

这篇具有很好参考价值的文章主要介绍了拆解与重构:慕云游首页组件化设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

  • 在现代Web开发中,组件化设计是一种常见的开发模式,它有助于提高代码的可维护性、可重用性和可测试性。

  • 通过将一个大型应用程序拆分为多个独立的组件,我们可以更加灵活地开发和维护网站。

  • 本文将以慕云游首页为例,探讨如何通过组件化设计实现它的页面布局与交互功能。

  • 前置知识:
    HTML CSS JavaScript webpack art-template
    慕云游静态项目

1 项目准备

1.1 创建项目目录

拆解与重构:慕云游首页组件化设计,前端,重构

  • 放入提前准备的文件,如封装的ajax

1.2 搭建项目开发环境

  1. 初始化项目
    在项目所在文件夹打开命令行,输入:

    npm init
    
  2. 安装项目所需的包(node模块):

    • webpack
    npm install --save-dev webpack webpack-cli
    
    • art-template
    npm install art-template
    
  3. 配置webpack:
    创建webpack.config.json文件,具体配置内容见Babel编译与Webpack

2 项目组件化

2.1 在当前环境启动原有项目

  1. 将原项目的文件,复制到Mall项目的src/page/index目录下
    拆解与重构:慕云游首页组件化设计,前端,重构

  2. 将原项目中的index.html文件改为index.art,当作模板文件
    拆解与重构:慕云游首页组件化设计,前端,重构

  3. src/pages/index目录下创建入口文件index.js,用于放引入的css文件和js文件,因为webpack无法直接从模板文件中访问他们
    拆解与重构:慕云游首页组件化设计,前端,重构

    //css
    import './css/bundle.css';
    import './css/reset.css';
    
    // js
    import './js/backtotop';
    import './js/menu';
    import './js/carousel';
    
  4. 在命令行输入npm start 运行项目,看到完整页面即可

2.2 顶部组件

  1. src/components/topbar目录下创建以下文件
    拆解与重构:慕云游首页组件化设计,前端,重构

  2. 在入口文件index.js中引入topbar.js

    //组件
    import 'components/topbar';
    
  3. index.art文件中topbar内容剪切到topbar.art
    拆解与重构:慕云游首页组件化设计,前端,重构

  4. index.art文件中引入topbar.art模板
    拆解与重构:慕云游首页组件化设计,前端,重构

  5. 同样的,相关的css内容剪切到topbar.css文件中,并在同目录下的index.js中引入topbar.css

    //css
    import './topbar.css'
    
  6. 这个时候我们会发现css中图片路径报错了
    拆解与重构:慕云游首页组件化设计,前端,重构

    • icon.png里是精灵图标,很多地方都共用,我们可以将icons.png放在公共资源src/assert/images中,再更改url拆解与重构:慕云游首页组件化设计,前端,重构

      background: url(images/icons.png) 0 -10px;
      
    • webpack.config.json中已配置 imagessrc/assets/images的路径别名拆解与重构:慕云游首页组件化设计,前端,重构

2.3 幻灯片组件

按2.1顶部组件步骤如法炮制

  • src/pages/index/components/carousel目录下,创建以下文件,再将原文件内容拆分搬运到相应文件中
    拆解与重构:慕云游首页组件化设计,前端,重构

  • 注意: 顶部组件在布局组件中src/components/topbar,幻灯片组件在页面组件中src/pages/index/components/carousel,在入口文件中引入js的路径不同

    //组件
    import 'components/topbar';
    import './components/carousel';
    

2.4 机酒自由行组件

同 2.1顶部组件操作一致,但是有个特殊的点类

  • 机酒自由行中的css样式都是公共样式,所以要放在公共资源目录src/asserts/styles
    • 创建layout.css文件,将jjzyx.css中的代码剪切进去,同时删除jjzyx.css文件
      拆解与重构:慕云游首页组件化设计,前端,重构

    • 在入口文件index.js中引入layout.css

      //公共样式
      import 'styles/layout.css';
      

2.5 拆分余下的css文件

  1. 将公共的基础样式(如下),放入src/asserts/stylesbase.css

    body {
        color: #1C1F21;
    }
    a {
        text-decoration: none;
        color: #1C1F21;
    }
    @font-face {
        font-family: "PingFangSCRegular";
        /* IE9 */
        src: url('../fonts/PingFangSCRegular.ttf?t=1583684254005') format('truetype');
    }
    @font-face {
        font-family: 'iconfont';
        src: url('../fonts/iconfont.eot');
        src: url('../fonts/iconfont.eot?#iefix') format('embedded-opentype'), url('../fonts/iconfont.woff2') format('woff2'), url('../fonts/iconfont.woff') format('woff'), url('../fonts/iconfont.ttf') format('truetype'), url('../fonts/iconfont.svg#iconfont') format('svg');
    }
    .iconfont {
        font-family: "iconfont" !important;
        font-size: 16px;
        font-style: normal;
        -webkit-font-smoothing: antialiased;
        -moz-osx-font-smoothing: grayscale;
    }
    .center-wrap {
        width: 1152px;
        height: 100%;
        margin: 0 auto;
        position: relative;
    }
    
    • 把原文件中fonts文件夹中的字体图标都移到公共的fonts
      拆解与重构:慕云游首页组件化设计,前端,重构

    • 在入口文件index.js中引入base.css

      //公共样式
      import './styles/base.css';
      
  2. reset.css也放入公共样式中
    拆解与重构:慕云游首页组件化设计,前端,重构

    • 改变reset.css在入口文件中的路径

      //css
      //import './css/reset.css';
      //公共样式
      import './styles/reset.css';
      
  3. 找到bundle.css中所有的公共样式,都剪切到layout.css中 ,再一步步按功能拆分成更多的css组件,最终将bundle.css中的内容搬空.

3 项目完善

3.1 幻灯片组件

3.1.1 结构和样式
  • src/pages/index/components目录下创建新组件slider,内部创建art、css、js文件,设置幻灯片的结构样式,并将carousel组件下images文件夹复制到slider组件中.
    拆解与重构:慕云游首页组件化设计,前端,重构

  • slider应用到index.art中,替换carousel;同样的,入口文件中也要替换

    // {{include './components/carousel/carousel.art'}}
       {{include './components/slider/slider.art'}}
    
    // import './components/carousel';
       import './components/slider';
    
3.1.2 功能实现
  • slider组件下创建module模块,用于存放各种功能的js文件,实现走马灯效果
    拆解与重构:慕云游首页组件化设计,前端,重构`

    • base.js
      import { ELEMENT_NODE_TYPE, SLIDER_ANIMATION_CLASS_NAME } from './constants';
      import DEFAULTS from './defaults';
      export default BaseSlider;
      
    • constants.js
      // keyboard
      export const LEFT_KEYCODE = 37;
      export const RIGHT_KEYCODE = 39;
      
      // base
      export const ELEMENT_NODE_TYPE = 1;
      export const SLIDER_ANIMATION_CLASS_NAME = 'slider-animation';
      
    • defaults.js
      export default DEFAULTS;
      
    • index.js
      import BaseSlider from './base.js';
      import keyboard from './keyboard.js';
      export default Slider;
      
    • keyboard.js
      import { LEFT_KEYCODE, RIGHT_KEYCODE } from './constants.js';
      export default keyboard;
      
    • slider/index.js
      import Slider from './module';
      
  • silder组件下创建按钮的模板文件btn.art,和样式文件btn.css,对左右按钮定位,并在对应js文件中绑定点击事件
    拆解与重构:慕云游首页组件化设计,前端,重构

    • slider/index.js
      import './btn.css';
      
3.1.3 使用Ajax获取数据
  • src/api目录下新建getData.js文件,封装获取数据的函数getData()

  • getData.js中导入ajax文件中需要用到的方法

    import { getJSON } from './ajax';
    
  • 将源码中的数字,放在新建的config.js文件中,当做配置,方便定位更改
    拆解与重构:慕云游首页组件化设计,前端,重构

    • config.js

      export const SUCC_CODE = 200;
      export const TIMEOUT = 30000;
      
    • getData.js

      import { SUCC_CODE, TIMEOUT } from './config';
      
    • slider/index.js

      import render from './slider.art';
      import { getData, getDelayedData } from 'api/getData';
      
3.1.4 加载中组件
  • src/components目录下新建加载中组件loading,内部创建模板文件,并进行简单布局,加入所需的资源
    拆解与重构:慕云游首页组件化设计,前端,重构

  • index.art
    拆解与重构:慕云游首页组件化设计,前端,重构

  • 将接口地址封装起来,新建config.js文件,方便替换.

    • slider/config.js

      export const URL ='https://www.imooc.com/api/mall-PC/index/slider?icode=J6DDC8E3E7A8BF54C';
      
    • slider/index.js

      import { URL } from './config';
      

3.2 机酒自由行组件

4 源码

网盘链接:https://pan.baidu.com/s/1PElIjlZpepRxaY6g8ChsVQ
提取码:dpq1


未完待续…文章来源地址https://www.toymoban.com/news/detail-645539.html

到了这里,关于拆解与重构:慕云游首页组件化设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 12 Web全栈 组件化设计(3)

    目录划分 开发组件库与开发项目的目录划分区别是很大的,我们再组件库开发时通常会把项目氛围源代码包,输出包、还有使用案例宝等等,这里不同的组件库的规划方式不同,带来的结果也不同。 开发环境构建 依赖安装 安装搭建Vue项目所需要的依赖包 在webpack.dev.js总加入

    2024年02月13日
    浏览(38)
  • 前端Vue入门-day03-用Vue实现工程化、组件化开发

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 生命周期 Vue 生命周期 和 生命周期的四个阶段  Vue 生命周期函数(钩子函数) 案例-create的应用 案例-mounted的应用 工程化开发 脚手架 Vue CLI 开发 Vue 的两种方式 基本介

    2024年02月15日
    浏览(58)
  • 前端工程化实战:React 模块化开发、性能优化和组件化实践

    前端工程化实战是指通过组织工作流程、使用工具和技术来提高前端开发效率和质量的一种方法。常见的前端工程化实践包括模块化开发、自动化构建、代码检查和测试、性能优化等。下面将简要介绍模块化开发、性能优化和组件化实践。 模块化开发 在 React 中实现模块化开

    2023年04月10日
    浏览(71)
  • Android组件化架构开发--为什么要使用组件化?组件分层?组件路由的简单实现。

    1.1 单工程项目结构 一般我们都是一个业务建一个包 缺点: 各种业务代码混杂在同一个模块里,开发人员在开发、调测过程的效率越来越低,定位某个业务问题,需要在多个业务代码混合的模块中寻找和跳转。 需要了解各个业务的功能,避免代码的改动影响其它业务的功能

    2024年02月10日
    浏览(63)
  • Vue组件化开发--公共组件的封装

    目录 为什么要封装组件 应用场景 vue自己封装组件(局部、全局)  Vue组件的三要素 ①全局组件 1)方式:  2)示例: ②局部组件 1)方式: 2)示例: 命名规范:(注意) 脚手架vue-cli中的组件 父传子(props) 通过 $on 传递父组件方法 $parent获取父组件然后使用父组件中的

    2024年02月05日
    浏览(58)
  • 组件化开发之如何封装组件-react

    组件是构建用户界面的基本单元,它是一个独立的、可重用的、可组合的代码单元,用于表示UI的一部分。 人话:当谈论组件时,就像在搭积木一样,每个组件都是一个 独立的、可以重复使用 的代码块,用来构建网页或应用的各个部分。比如界面的布局,像按钮、文本输入

    2024年02月11日
    浏览(62)
  • Vue(组件化编程:非单文件组件、单文件组件)

    传统组件编写:不同的HTML引入不同的样式和行为文件 组件方式编写:组件单独, 复用率高(前提组件拆分十分细致)  理解为封装行为:html,css,js封装在一个文件中 解释模块化和组件化的区别: 组件化 :css,js,html三件套使用在同一部分的代码封装在一个组件中 模块化

    2024年02月01日
    浏览(52)
  • Android 组件化○

    1.组件化 组件化是指解耦复杂系统时,将多个功能模板拆分、重组的过程。在Android工程表现上就是把app按照其业务的不同,划分为不同的Module。 组件化架构的目的就是让每个业务模块变得相对独立,各个组件在组件模式下可以独立开发调试,集成模式下又可以集成到“app壳

    2023年04月20日
    浏览(76)
  • 组件化编程

    向外提供特定功能的js程序-- 一般就是一个js文件 作用--复用js、简化js的编写、提高js运行效率 模块化--当应用中的js都是以模块来编写的 -- 这个应用就是一个模块化的应用 用来实现局部(特定)功能效果的代码集合 作用--复用编码 -- 简化项目编码、提高运行效率 组件化 -

    2024年02月05日
    浏览(95)
  • 组件化开发复习

    createApp 函数传入了一个对象 App ,这个对象其实本质上就是一个组件,也是我们应用程序的根组件 可以写为:  我们先来学习一下全局组件的注册:  全局组件需要使用我们全局创建的 app 来注册组件;  通过 component 方法传入组件名称、组件对象即可注册一个全局组件了;

    2024年02月15日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包