Vue.js + cube-ui 高仿饿了么 App 项目学习笔记

1.Vue.js介绍

  • MVVM框架


    MVVM
  • 什么是Vue.js
    1,它是一个轻量级的MVVM框架
    2,数据驱动+组件化的前端开发
    3,社区完善(GitHub,论坛,聊天室,Twitter)

  • 对比Angular、React
    Vue.js更轻量,gzip后大小只有20K+
    Vue.js更容易上手,学习曲线平稳
    吸取两家之长,借鉴了angular的指令和React的组件化

  • 数据驱动


    数据驱动

  Vue.js通过Directives指令对DOM做一层封装,当数据发生改变,会通知指令去修改对应的DOM,数据驱动DOM变化,DOM是数据的一种自然映射;Vue.js还会对操作做一些监听,当修改视图时,Vue.js监听到这些变化,从而改变数据,形成了数据的双向绑定。

  • 数据响应原理


    数据响应原理
  • 组件化
    扩展HTML元素,封装可重用的代码

  • 组件设计原则
    页面上每个独立的可视、可交互区域视为一个组件
    每个组件对应一个工程目录,组件所需的各种资源在这个目录下就近维护
    页面不过是组件的容器,组件可以嵌套自由组合形成完整的页面

更多Vue基础知识可以参考慕课网wiki:Vue.js 教程


2.准备工作

2.1 Vue CLI

  Vue的脚手架工具,帮助我们写好Vue.js基础代码的工具,能帮我们搞定目录结构、本地调试、代码部署、热加载、单元测试等工作。
  文档地址:Vue CLI 中文文档

  • 安装Vue CLI(3.0以上版本)
#前提是已安装了node,查看node版本,确认已安装node,如未安装,自行百度
node -v
#安装Vue CLI (Mac系统安装操作涉及权限,需要在前面加sudo,下同)
npm install -g @vue/cli
# OR
yarn global add @vue/cli
#运行这个命令查看版本,验证是否安装成功
vue --version


  • 创建一个项目
#运行以下命令来创建一个新项目eleme-vue-cube
vue create eleme-vue-cube
创建项目
  • 启动项目
#进入目录
cd eleme-vue-cube
#启动项目
npm run serve


  • 项目文件介绍
|-- eleme-vue-cube
    |-- .browserslistrc
    |-- .editorconfig
    |-- .eslintrc.js
    |-- .gitignore           //指定文件无需提交到git上
    |-- README.md
    |-- babel.config.js      //使用一些预设
    |-- package-lock.json    //版本管理使用的文件
    |-- package.json         //项目描述及依赖
    |-- postcss.config.js
    |-- node_modules         //项目依赖(对webpack进行了封装)
        |-- ...
    |-- public
    |   |-- favicon.ico      //网站图标
    |   |-- index.html       //入口html文件
    |-- src                  //项目源码
        |-- App.vue
        |-- main.js          //入口js文件
        |-- assets
            |-- logo.png
        |-- components
            |-- HelloWorld.vue


  • webpack打包


    webpack

详细了解请参阅:webpack中文文档

2.2 cube-ui

  • 安装cube-ui
    在vue-cli3.0的项目里,直接使用 vue add cube-ui 就可以安装;
    安装cube-ui

    后编译(post-compile):不去使用cube-ui编译后的代码,直接引用它的源码,用我们的应用去编译这块儿代码;好处是可以减少整个构建包的体积.
    官方文档地址:cube-ui中文文档Cube-UI中文文档

2.3 api接口mock

通过data.json文件模拟后台数据

//向vue.config.js中添加:
// 1.引入data.json文件(在项目根目录),获取对应的数据
const appData = require('./data.json')
const seller = appData.seller
const goods = appData.goods
const ratings = appData.ratings

//2.module.exports = {}中添加devServer
devServer: {
    before (app) {
      app.get('/api/seller', function (req, res) {
        res.json({
          errno: 0,
          data: seller
        })
      })
      app.get('/api/goods', function (req, res) {
        res.json({
          errno: 0,
          data: goods
        })
      })
      app.get('/api/ratings', function (req, res) {
        res.json({
          errno: 0,
          data: ratings
        })
      })
    }
}

  devServer表示本地服务器,里面有个before方法,参数是app,可以在这里面定义接口,例如里面定义的app.get('/api/seller',启动服务后,用浏览器访问http://localhost:8080/api/seller,可以在页面看到接口返回的json数据。

2.4 项目资源准备

  • 1.删除了原来项目的src/assert目录、删除了HelloWorld.vue
  • 2.public/index.html 修改,锁定禁止缩放(maximum-scale=1.0,minimum-scale=1.0,user-scalable=no)
  • 3.新建src/common目录 用于存放资源
  • 4.新建src/common/fonts 存放图标字体相关文件
  • 5.新建src/common/stylus 存放base.styl(定义的基础样式),icon.styl(字体图标的一些样式 引用了fonts下面的文件),index.styl(内部import icon和base),mixin.styl(引用到cube-ui中的styl),variable.styl(引用了cube-ui的变量 并定义背景色和主题色)
    //修改后项目路径src下
    |-- src                  //项目源码
        |-- App.vue
        |-- main.js          //入口js文件
        |-- common           //公共资源
            |-- fonts        //字体图标相关文件
            |-- stylus      //样式
        |-- components
    //common文件夹及源码地址见文末


4.组件开发

html和css部分暂不详述

4.0 组件注册

  项目中使用了Babel 和 webpack 的模块系统的情况下,Vue官方推荐我们创建一个 components 目录,并将每个组件放置在其各自的文件中。
  然后你需要在局部注册之前导入每个你想使用的组件。例如,在一个假设的 ComponentB.js 或 ComponentB.vue 文件中:

import ComponentA from './ComponentA'
import ComponentC from './ComponentC'

export default {
  components: {
    ComponentA,
    ComponentC
  },
  // ...
}

  现在 ComponentA 和 ComponentC 都可以在 ComponentB 的模板中使用了。
  更多组件注册方式,可查看文档:组件注册-Vue.js

4.1 头部组件相关技术点

4.1.1 axios

  请求数据使用了axios(类似ajax),一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。github地址:axios/axios,中文文档地址:翻译比较到位的axios中文文档

4.1.2 create-api

  点击弹出弹窗层,使用了create-api,一个能够让 Vue 组件通过 API 方式调用的插件。
  使用方法:先注册后使用。文档地址:Cube-UI中文文档 create-api 模块

4.2 Tab组件(另行补充)

4.3 商品页面(另行补充)

4.4 商品详情(另行补充)

4.5 评价和商家页面(另行补充)


5.打包部署

  使用命令 npm run build 编译,生成dist文件夹;将整个项目文件上传到阿里云,进入项目根路径下,执行 nohup node prod.server.js &,后台启动。

[root@pliuServer eleme-vue-cube]# nohup node prod.server.js &
[1] 13688
[root@pliuServer eleme-vue-cube]# nohup: ignoring input and appending output to ‘nohup.out’


写在最后:
  本人毕竟是一个Java后端,由于时间关系,有些地方没有深入,后续会再次补充;代码已上传至码云仓库,点击可查看完整代码
  感谢慕课网ustbhuangyi老师的课程:Vue.js2.5+cube-ui重构饿了么App,受益匪浅。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,104评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,816评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,697评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,836评论 1 298
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,851评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,441评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,992评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,899评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,457评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,529评论 3 341
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,664评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,346评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,025评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,511评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,611评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,081评论 3 377
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,675评论 2 359

推荐阅读更多精彩内容