饿了么Vue笔记 2018-09-03

1. 功能技术:

vue-resource : 后端

Vue-router : 前端

第三方库 : better-scroll

最大程度组件化

收藏功能利用localstorage接口

图标字体应用

移动端1px边框

css sticky footer布局

flex弹性布局


2. 使用工具

Vue-cli :脚手架搭建基本代码框架

Vue-router: 官方插件管理路由

Vue-resource : ajax通信

webpack构建工具

es6+eslint:js/ECMAscript中识别和报告模式匹配的工具,保证代码的一致性


3.什么是MVVM

https://www.cnblogs.com/guwei4037/p/5591183.html

典型MVVM框架: angular,js    react.js   vue.js(轻量级)


4.vue

轻量级MVVM框架

核心思想 : 数据驱动+组件化的前端开发

数据驱动:数据(model)改变驱动视图(view)自动更新

组件化 : 扩展HTML元素,封装可重用代码。页面上每个独立可视或可交互区域都视为一个组件,每个组件对应一个工程目录,组件所需要的资源在此目录下就近维护。


5.Vue-cli:Vue 脚手架

npm install vue-cli -g

测试:运行vue 显示 command【option】证明安装成功,下面会显示commands命令以及可以使用的 templates模板,使用init命令安装模板,这里用webpack:

vue init webpack sell

sell是为模板起的名字




创建完之后会提示:


按照命令执行

最后会提示 :

浏览器输入localhost:8080出现:



脚手架搭建成功



6.一些项目文件介绍(部分,记不住的)


build&config:webpack配置相关

static : 存放静态资源,目前只有一个空的.gitkeep文件,作用是当此目录为空格,也可以将这个目录提交到github代码仓库里(一般目录为空不会提交)

.babelrc : babel配置,使浏览器兼容ES6语法,其中presets表示预设,预先需要安装的插件,stage-x:表示ECMA的草案数字越小包含的越多,目前有0-3共四个阶段,stage-2表示包含2到3.意义是草案中包含env中没有包含的语法,都可以在stage插件中进行转换。   除了presets预设插件,下面还有plugins插件。transform-runtime插件:把es6的一些的方法做转换。

.editorconfig : 编辑器的配置

.eslintignore : 忽略语法检查

eslintrc.js : eslint的配置文件,网址里面可以查看语法规则 rules.md

package.json :配置文件。里面的script表示配置的运行脚本,比如

"scripts": {

"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", "start": "npm run dev", "lint": "eslint --ext .js,.vue src", "build": "node build/build.js"

}

我们运行命令npm run dev的时候,实际上就是执行了后面那段代码。nom run src就是执行了后面那段。

dependencies : 生产环境依赖

devdependencies : 开发环境依赖

"vue": "^2.5.2"

上箭头表示最低安装版本为2.5.2

7.观察localhost:8080的页面源码可以看到component组件的基本构成是由template、script、style组成的

8.关于切图,一般都会切2x和3x的格式的图片,以适应不同手机屏幕的设备像素比,推荐文章https://www.zhangxinxu.com/wordpress/2012/08/window-devicepixelratio/

window.devicePixelRatio     可以查看设备像素比

使用webpack打包图片文件,所以建议直接使用单张图片即可,不需要使用精灵雪碧图


9. 使用ICOMOON将SVG图转换成字体图标 


10.项目目录设计

src存放项目文件:

main.js:入口文件

app.vue:整个页面的vue实例文件

src下面子目录,assets: 和 components:存放组件文件

common:公共模块

stylus:一个css预处理器

将使用icon moon转换的字体图标放置到SRC中的common中,结构如下:


将style.css后缀改为styl(stylus语法);

根据stylus语法,将文件中的冒号以及中括号全部删除,使用stylus语法需要将style标签指定

<style lang="stylus" rel="stylesheet/stylus"></style>

将asssets目录删除


11. mock数据(模拟后台数据)

(1)先模拟一个data.json文件,里面是获取的数据内容

数据主要是seller,goods,ratings三部分

(2)在webpack-dev-conf.js中修改

首先在const portfinder = require('portfinder')下面添加


然后在devServer里面添加


req [客户端发过来的请求所带数据]

res [服务端的相应对象,可使用res.send返回数据,res.json返回json数据,res.down返回下载文件]


(3)修改完成,执行npm run dev之后获取页面,然后输入链接

后缀为/api/seller,/api/goods,/api/ratings测试数据是否获取成功


获取到json数据证明模拟后台数据成功

拓展:Google插件jsonview可以直接获取格式化好的json数据

关于express路由:http://www.expressjs.com.cn/guide/routing.html


12、使用语法时,希望可以加分号区分,但是eslint不允许使用分号,可以在eslint中进行配置:eslintrc.js中:rules中加上

'semi':['error','always']

关于eslint配置官网:http://eslint.cn/

命令行报错中也会出现地址,可以直接打开地址,根据文档进行配置

报错no-trailing-spaces时,配置 ‘indent’:0

只要给配置项设置为0,就可以使eslint忽视此规则

13、配置也可以在文件注释中写入:



eslint no-new规则规定new一个对象时必须将他赋值给一个变量,而这里不需要将vue赋值给任何变量,所以加上 eslint-disable +规则名,以跳过对此代码的规则校验


14.组件拆分

引入和注册组件:

先写好组件模板:

header.vue:

<template>

<div class="header">i am header????</div>

</template>

<script type="text/ecmascript-6">

export default {};

</script>

<style> 

</style>

在App.vue中引入

引入:                                                                        import header from './components/header/header.vue';

export default {

注册:

components: { 'v-header' : header }

};

注册之后可以直接使用header标签


Vue.config.productionTip = false;   关闭生产模式下给出的提示


15.在vue中使用stylus:

npm install stylus --save-dev

npm install stylus-loader

移动端设计稿为IPHON6设计稿,设备像素比为2,所以应该按照50%来写

stylus语法格式:https://www.zhangxinxu.com/jq/stylus/

vue会自动针对浏览器进行样式兼容 因为vue-loader依赖了post-css插件,搞定浏览器css兼容问题

&表示父元素

css书写顺序:布局写前面其后宽高 最后样式


16、Vue router:https://router.vuejs.org/zh/

设置路由:

HTML:


main.js:



router/index.js

这里我将默认代码拆分成变量,分别进行设置,比较清晰,并且可以在下面进行配置,最后将配置好的路由直接输出即可。


根据文档设置好路由之后,tab可以自由切换,但是一开始的时候goods页面为空白,需要使用编程式导航

router.push('/goods'); 设置默认直接导航到新的URL


17.更改被点击的tab文字颜色  API

需求:tab在被点击时,对应的a标签文字颜色被改变

分析:代码中可以看到被点击的tab会自动添加一个类名:router-link-active,这是默认类名,可以为此类名添加样式即可。但是我们想使用active类名代替。

解决:

css:

这里指定a.active的颜色(&代表父级)

router/index.js:


将默认类名配置为:active,页面就有效果了


18、1像素border实现

问题点:1px solid 在pc端实现很正常,手机端有问题

解决:流程:after伪类写一条线,再使用@media query对不同设备像素比的手机进行调整缩放达到效果

(1).创建文件mixin.styl

使用mixins语法:https://www.zhangxinxu.com/jq/stylus/mixins.php

mixin语法相当于一个公共样式函数:

创建一个border-1px,传入参数$color,进行相对定位下面写上样式,为它设置一个伪类绝对定位。

App.vue :

使用@import引入mixin.styl文件,在需要一像素的元素下面,将设置好的border-1px写入即可

(2)创建一个公共的类名

创建公共类文件:base.styl,里面做响应的@media缩放处理


创建一个index.styl将所有的公共样式引入以便于全局引用


在main.js中引用它:


注意:直接使用common开头的路径需要在webpack.base.conf.js中配置


引入完成之后,就可以全局使用类名了

比如此处需要对tab的border进行@media缩放,就可以直接在标签上使用类名border1px:



19.手机效果查看技巧:

命令行:ifconfig   或者 ipconfig(windows系统)

会出现windows ip 配置

找到IP

将localhost 更改为IP地址试一下是否可以登录,然后登陆cli.in将网址复制进去生成二维码手机扫描即可,注意:手机和电脑要登录同一个局域网才可以


20.header组件开发 (vue-resource)

https://github.com/pagekit/vue-resource 文档中changelogos可以看到更新日志

设计稿的header中,商品名称,评分,商家信息等信息都是通过header组件请求后台数据得到数据并渲染在页面上。在header的父组件app.view组件中,发送ajax请求获取数据,将数据通过header的props传递给此组件

安装--》引入--》使用

main.js:

app.vue中export default data函数接受数据,注意data与括号之间要有空格

使用vue-resource:

created 钩子函数

实例生命周期

之前的版本是通过,json来拿到json对象,但是现在升级版本的.json返回的是promise对象,在这里可以查看

取到数据之后,console.log之中:

返回了数据以及get set等,这是vue给对象自动添加的监听,方便改变时自动渲染到dom


21.外部组件

注意:组件依赖的图片都要放到组件里面去维护

首先在APP.Vue中通过vue.resuorce的ajax获取数据,然后将数据绑定到模板上


然后去编写相应的组件

22.对于需要media query的地方,可以定一个mixin函数来处理

common->stylus->mixin.styl 下,定义一个函数

在需要用到的界面引入这个文件,然后使用它

注意:这里的路径一定是相对路径,而不能通过webpack配置任意开头路径,因为webpack只能配置js路径


23.渲染活动滚动条的方法

1.设置自定义类名bg-image.使更换类名就可以更换icon

自定义类名的函数:

注:自定义样式写

index引入其他两个样式文件,base里面是通用样式如@media,

mixin定义各种样式函数

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

推荐阅读更多精彩内容

  • 基于Vue的一些资料 内容 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 element★...
    尝了又尝阅读 1,140评论 0 1
  • 一、 组件component 1. 什么是组件? 组件(Component)是 Vue.js 最强大的功能之一。组...
    饥人谷_Leonardo阅读 1,944评论 0 18
  • Vue-Music 一| 前期工作 1.项目初始化 npm install -g vue-cli vue init...
    noobakong阅读 1,820评论 0 5
  • 写在开头 先说说为什么要写这篇文章, 最初的原因是组里的小朋友们看了webpack文档后, 表情都是这样的: (摘...
    Lefter阅读 5,273评论 4 31
  • vue去哪网跟学笔记 记录学习点滴 1. 初始化项目 1.1 手机显示配适 minimum-scale=1.0,m...
    noobakong阅读 2,228评论 0 16