Vue.js仿eleme项目(1)

一,学习背景及介绍

目标
掌握Vue.js在实战中的运用,
学会使用Vue.js完整地开发移动端APP
学会组件化、模块化的开发方式
内容
vue.js框架介绍
vue-cli脚手架 搭建基本代码框架
vue-router 官方插件管理路由
vue-resource Ajax通信
Webpack 构建工具
es6+eslint eslint--es6代码风格检查工具
工程化、组件化、模块化
移动端常用开发技巧:flex弹性布局,css stickyfooter,酷炫的交互设计

背景
vuejs是基于es5特性开发,旧浏览器无法支持,适用移动端和IE9+的高级浏览器。

传统的后台mvc方式是前端和后端发生数据交互时,会刷新整个页面。因此我们通过Ajax方式和后端rest api做通讯,一部分刷新页面的某个区块,来优化和提升体验,同时把mv*拿到前端来做。
架构从传统后台MVC 向REST API+前端MV* 迁移。
MV*包含{ MVC, MVP, MVVM(vuejs)}。

mvvm = model(数据部分--js对象)+view(视图--dom)+viewmodel(通讯--连接视图和数据的中间件)。 视图和数据不能直接通讯,通常需要通过viewmodel做通讯。

Vue 借鉴了 angular 的指令 和 react 的组件化。

vuejs核心思想

数据驱动+组件化


实现双向绑定

过程:1. Vue实例化时,调用Object.defineproperty()为a.b设置getter和setter; 2.Vue编译模板生成Directive指令对象,如v-text="a.b",每一个指令对象关联一个Watcher; 3.当指令对表达式a.b求值时,调用Watcher计算a.b,最终执行a.b.getter; 4.当改变数据a.b,即对a.b赋值时,触发a.b.setter,通知Watcher对a.b重新求值,当发现值改变,则向指令对象发送Notify(事件); 5.指令对象监听到Notify,触发update更新DOM。由于指令是对dom的封装,所以它会调用原生dom的方法去更新视图,这样我们就完成了数据改变到视图更新的自动过程。
用户看不到 getter/setter,但是在内部它们让 Vue 追踪依赖,在属性被访问和修改时通知变化。浏览器控制台在打印数据对象时 getter/setter 的格式化并不同,可以使用vue-devtools 。每个组件实例都有相应的 watcher 实例对象,它会在组件渲染的过程中把属性记录为依赖。

接下来我们看一下组件的三个设计原则。1.页面上每个独立的可视、可交互区域视为一个组件,比如我们一个页面的头部,尾部。2. 每个组件对应一个工程目录,组件所需要的各种资源在这个目录下就近维护,这个就近原则其实就体现了前端工程化的思想,提供了一个很好的分治策略,每个开发者都将清楚地知道自己开发维护的功能单元,样式也好,js也好,页面结构也好,都在那里。 在Vue中,可以通过.vue文件把组件依赖的模板,js和样式都写在一个文件中,这可以把组件化的就近维护思想发挥到了极致。 3. 页面不过是组件的容器,组件可以嵌套自由组合,形成完整的页面。左侧是我们的页面, 他被拆分成一个个小的区块,每个区块其实都对应着一个组件,在Vue中每个组件都对应着一个view model, 那最终我们生成这个view model的一个树,他跟我们的dom树,就是一个一一对应的关系。

几个快捷方式

打开chrome的devtools,cmd+option+I.
Intellij Idea中Reformat代码,cmd+option+L.

二,vue-cli脚手架工具

vue-cli 脚手架工具的作用:目录结构、本地调试、代码部署、热加载、单元测试,静态资源编译。
搭完环境后,看看里面的文件。熟悉index.html -> src/main.js. src/App.vue -> src/components/Hello.vue.

.vue文件有三部分,template,script,style.

看一下src/App.vue:

<template>
  <div id="app">
     <img....>
    <hello></hello>
    <p>
      Welcome to your Vue.js app!
    </p>
    ...
  </div>
</template>

<script>
import Hello from './components/Hello'

export default {
  components: {
    Hello
  }
}
</script>
  ...

必须要在script中注册Hello组件才能在template中使用。components: { Hello }用到了es6的简写格式,完整的是{Hello: Hello}第二个Helloimport引用引入。在template中用hello小写字母是因为html对大小写不敏感。

项目文件结构

  • 一级目录
    build+config:webpack配置相关。
    node_modules:通过npm install安装的依赖代码库。
    src:存放我们的项目源码。
    static:存放第三方静态资源。里面有一个文件 .gitkeep.js(作用:空目录也可以存放到git里面)。
  • 文件
    babelrc:babel将es6编译成es5,rc是配置。 其中 presets:预设(预先需要安装的插件);plugins:做转换的依赖插件代码;comments:false代表转换后代码不生成注释。转换具体内容在node_modules中。
    editorconfig:编辑器的配置。
    package.json:配置文件。 ^表示安装的最低要求版本。
    dependencies:项目生产环境下的依赖。
    devDependencies编译过程依赖,不会存在于打包后的代码中。
    .eslintignore:对指定目录文件build和config语法检查
    .eslintrc.js: eslint的配置文件。值为0就是不允许某个规则。
    gitgonre:git仓库忽略的文件,不会提交。
    index.html:入口文件
    README.md:项目描述文件

三,webpack

现谈的是开发时的webpack配置。

这篇文章详细介绍了vue-cli 2.0中的webpack可以做参考。

从package.json 可以看出npm run dev运行的是node build/dev-server.js这个代码。

然后依次浏览一下相关文件,如webpack.base.conf.jswebpack.ev.conf.js等。

四,项目准备工作

1. 需求分析

2. 项目资源准备

张鑫旭的devicepixelratio(dpr)介绍,观察resource目录下的设计资源文件。

devicepixelratio笔记如下:

window.devicePixelRatio是设备上物理像素和设备独立像素(device-independent pixels (dips))的比例。
公式表示就是:window.devicePixelRatio = 物理像素 / dips

dip或dp,(device independent pixels,设备独立像素)与屏幕密度有关。dip可以用来辅助区分视网膜设备还是非视网膜设备。

1.devicePixelRatio在大多数浏览器是值得信赖的。
2.在iOS设备,screen.width乘以devicePixelRatio得到的是物理像素值。
3.在Android以及Windows Phone设备,screen.width除以devicePixelRatio得到的是设备独立像素(dips)值。
注:本文的DIPs切勿和DPI搞混了!DPI指每英寸点的个数,本文的DIPs指设备独立像素。

3. 图标字体制作

https://icomoon.io/
用svg格式的图片来制作图标字体,来引用一些小的颜色单一的图片,好处是图片缩放不会失真。 工具:www.icomoon.io 操作步骤:将svg图标导入网站,并生成图标字体,然后导出,将里面的fonts文件和style.css文件拿到项目里即可。

4.项目目录设计

这样添加目录结构

然后将style.css更名为icon.styl。改成stylus语法删除括号和分号。最后删除assets文件夹。

5. mock数据

新建一个json文件data.json,里面写了一些mock的数据。dev-server.js 编写接口,用express框架起一个node sever,用express router编写接口请求。 定义路由 var apiRoutes = express.Router()。
定义接口

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

推荐阅读更多精彩内容

  • 转载 :OpenDiggawesome-github-vue 是由OpenDigg整理并维护的Vue相关开源项目库...
    果汁密码阅读 23,083评论 8 124
  • 周韵声老师留题诗作 忧劳成往事, 平庸度余年。 常忆众赤子, 喜读新诗篇。 蝼蚁终粪土, 凤鹤久鸣喧。 长河永奔流...
    肖三羊阅读 435评论 1 3
  • 他弹起吉他了。 在稀薄的二月 在凌晨的两点五十八分 一把刀和几滴新鲜血液 躺在木质的地板上 陪着他 这些物件 证明...
    鹿小姐在1896阅读 113评论 0 0
  • 活着很容易,一顿三餐吃饱总是不难,有屋有衣不计较好坏也容易做到。 生活却是不易,你需得知道自己想要的是什么,是浪迹...
    花期未央阅读 301评论 0 1
  • 今晚的主题是旅行,一个人的第一次旅行是丽江,大理,让我深深喜欢上一个人的感觉,旅行是视野的开阔,也是心灵的洗礼,往...
    保护色M阅读 330评论 0 0