饿了么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是为模板起的名字


饿了么Vue笔记 2018-09-03_第1张图片


饿了么Vue笔记 2018-09-03_第2张图片


创建完之后会提示:


饿了么Vue笔记 2018-09-03_第3张图片

按照命令执行

最后会提示 :

浏览器输入localhost:8080出现:


饿了么Vue笔记 2018-09-03_第4张图片


脚手架搭建成功



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


饿了么Vue笔记 2018-09-03_第5张图片

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中,结构如下:


饿了么Vue笔记 2018-09-03_第6张图片

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

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

将asssets目录删除


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

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

饿了么Vue笔记 2018-09-03_第7张图片

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

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

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


饿了么Vue笔记 2018-09-03_第8张图片

然后在devServer里面添加


饿了么Vue笔记 2018-09-03_第9张图片

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

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


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

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


饿了么Vue笔记 2018-09-03_第10张图片

获取到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、配置也可以在文件注释中写入:


饿了么Vue笔记 2018-09-03_第11张图片


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


14.组件拆分

引入和注册组件:

先写好组件模板:

header.vue:

在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:


饿了么Vue笔记 2018-09-03_第12张图片

main.js:


饿了么Vue笔记 2018-09-03_第13张图片


router/index.js

饿了么Vue笔记 2018-09-03_第14张图片

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


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

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


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

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

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

解决:

css:

饿了么Vue笔记 2018-09-03_第15张图片

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

router/index.js:


饿了么Vue笔记 2018-09-03_第16张图片

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


18、1像素border实现

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

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

(1).创建文件mixin.styl

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

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

饿了么Vue笔记 2018-09-03_第17张图片

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

App.vue :

饿了么Vue笔记 2018-09-03_第18张图片

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

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

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

饿了么Vue笔记 2018-09-03_第19张图片


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


饿了么Vue笔记 2018-09-03_第20张图片

在main.js中引用它:


饿了么Vue笔记 2018-09-03_第21张图片

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


饿了么Vue笔记 2018-09-03_第22张图片

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

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


饿了么Vue笔记 2018-09-03_第23张图片


19.手机效果查看技巧:

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

会出现windows ip 配置

找到IP

饿了么Vue笔记 2018-09-03_第24张图片

将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 钩子函数

实例生命周期

饿了么Vue笔记 2018-09-03_第25张图片

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

饿了么Vue笔记 2018-09-03_第26张图片

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

饿了么Vue笔记 2018-09-03_第27张图片

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


21.外部组件

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

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


饿了么Vue笔记 2018-09-03_第28张图片

然后去编写相应的组件

饿了么Vue笔记 2018-09-03_第29张图片

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

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

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

饿了么Vue笔记 2018-09-03_第30张图片

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


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

饿了么Vue笔记 2018-09-03_第31张图片

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

饿了么Vue笔记 2018-09-03_第32张图片

自定义类名的函数:

饿了么Vue笔记 2018-09-03_第33张图片

注:自定义样式写

饿了么Vue笔记 2018-09-03_第34张图片

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

mixin定义各种样式函数

你可能感兴趣的:(饿了么Vue笔记 2018-09-03)