Vue.js权威指南

2019-08-07 15:38:51 浏览数 (1)

一、遇见Vue.js

1.MVP,从MVC演化而来,Controller/Presenter负责逻辑的处理,完全把View和Model进行了分享,主要的程序逻辑在Presenter里实现,与具体的View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View的时候可以保持Presenter不变

2.MVVM,只是把MVC的Controller和MVP的Presenter改成了ViewModel,View的变化会自动更新到ViewModel,ViewModel的变化也会自动同步到View上显示

二、数据绑定

三、指令

1.指令(Directive)是特殊的带有前缀v-的特性,指令的值限定为绑定表达式,指令的职责就是当其表达式的值改变时把某些特殊的行为应用到DOM上

2.v-if有更高的切换消耗,而v-show有更高的初始渲染消耗。因此,如果需要频繁地切换,使用v-show较好;如果在运行时条件不大可能改变,则用v-if较好

3.v-model指令参数:number,将用户的输入自动转换为Number类型;lazy,将数据改到在change事件中发生;debounce,设置一个最小延迟,在每次敲击之后延时同步输入框的值与数据

4.应该尽量避免直接设置数据绑定的数组元素,因为这些变化 不会被Vue.js检测到,因而也不会更新视图渲染

5.使用v-for,将得到一个特殊的作用域,类似于AngularJS的隔离作用域,需要明确指定props属性传递数据,否则在组件 内将获取不到数据

四、计算属性

  1. 计算属性就是当其依赖属性的值发生变化 时,这个属性的值会自动更新,与之相关的DOM部分也会同步自动更新

五、表单控件绑定

1.多个复选框放入一个数组中

2.当被选中的option有value属性时,vm.selected为对应option的value值;否则为对应option的text值

六、过滤器

1.过滤器,本质上都是函数,作用在于用户输入数据后,它能够进行处理,并返回一个数据结果;过滤器函数将始终以表达 式的值作为第一个参数,带引号的参数会被当作字符串处理,而不带引号的参数会被当作 数据属性名来处理

2.内置过滤器:

字母操作:capitalize、uppercase、lowercase

json过滤器:son

限制:limitBy、filterBy、orderBy处理并返回过滤后的数组

currency过滤器:将数字值转换为货币形式输出

debounce过滤器:延迟处理器一定的时间执行

七、Class与Style绑定

1.可以传给v-bind:class一个对象,以动态地切换class,v-bind:class指令可以与普通的class特性共存

2.v-bind:style绑定内联css

八、过滤

1.transition特性可以与这些资源一起搭配使用:v-if、v-show、v-for、动态组件

2.内置Class类名:.xxx-transition、.xxx-enter、.xxx-leave

3.只使用js钩子时,为js过渡显式声明css:false,Vue.js将跳过CSS检测,这样也会防止css规则对过渡的干扰

九、Method

1.所有的Vue.js事件处理方法和表达式都严格绑定在当前视图的ViewModel上

2.需要注意:

  • methods中定义的方法内的this始终指向创建的Vue实例
  • 与事件绑定的方法支持参数event即原生DOM事件的传入
  • 方法在普通元素上时,只能监听原生DOM事件;用在自定义元素组件上时,也可以监听子组件触发的自定义事件

3.四个事件修饰符:.prevent、.stop、.capture、.self

十、Vue实例方法

1.组件树访问:$parent、$root、$children、$refs

2.DOM访问:$el、$els

3.数据访问:$data、$options

4.实例方法:$appendTo()、$before()、$after()、$remove()、$nextTick()

5.实例event方法:$on()、$once()、$emit()、$dispatch()、$broadcast()、$off()

十一、组件

1.Vue.js的组件可以理解为预先定义好行为的ViewModel类,一个组件可以预定义很多选项,但最核心的:

模板(template)、初始数据(data)、接受的外部参数(props)、方法(methods)、生命周期钩子函数(lifecycle hooks)

2.props是组件数据的一个字段,期望从父组件传下来数据,组件的作用域是孤立的,意味着不能并且不应该在子组件的模板内直接引用父组件的数据,所以子组件需要显式地用props选项来获取父组件的数据

3.组件通信:this.$parent、this.$children、this.$root,不过子组件应当避免直接依赖父组件的数据,尽量显式地使用props传递数据,在子组件中修改父组件的状态是非常糟糕的做法,会导致父子紧密地耦合,很难理解父组件的状态

4.solt作为原始内容的插槽,父组件的内容将被抛弃,除非子组件模板包含<slot>,标签的内容视为回退内容,回退内容在子组件的作用域内编译,当宿主元素为空并且没有内容插入时显示这个回退内容

5.混合以一种灵活的方式为组件提供分布利用的功能,混合对象可以包含做任意的组件选项,当组件使用了混合对象时,混合对象的所有选项将被“混入”组件自己的选项中

6.生命周期:init、created、beforeCompile、compiled、ready、attached、detached、beforeDestory、destroyed

十二、表单校验

1.vue-validator

2.v-validate指令语法:v-validate[:field]=“array literal | object literal | binding”

3.内置验证规则:required、pattern、minlength、maxlength、min、max

4.v-validate所在元素,可以监听的事件:valid、invalid、touched、dirty、modified

十三、与服务端通信

1.vue-resource

2.vue-async-data,是一个异步加载数据状态指示的插件,本身并不支持异步获取服务端数据的功能,仅仅指示数据目前是处于加载 状态还是已经加载完毕

十四、路由与视图

1.vue-router

2.vue-router钩子函数:canReuse、canActivate、activate、data、canDeactivate、deactivate

十五、vue-cli

1.快速生成一个基于Webpack构建的项目:vue init webpack my-project

2.支持的命令:vue init <template-name><project-name>;vue list;

十六、测试开发与调试

1.ESLint

2.工具包:eslint-loader、eslint-friendly-formatter、eslint-config-standard、eslint-plugin-html

3.开发工具:Vue Syntax Highlight、Snippets(sublime)、VUe.js(WebStorm)、Vue(Visual Studio Code)

4.调试工具:Chrome——Vue.js devtools

十七、Scrat Vue.js的化学反应

1.前端工程化:开发规范、模块化、组件化、组件库、性能优化、项目部署、开发流程、工程工具

2.Scrat是UC团队在百度的FIS基础上二次开发的webapp模块化开发框架,最大的特色是模块化开发和模块生态,理念是像搭积木一样开发和维护系统,通过组装模块得到一个完整的系统

十八、Vue.js2.0

1.Virtual DOM:通过JS对象表示的树结构来构建一棵真正的DOM树,当数据状态发生变化时可以直接修改这个JS对象,接着对比修改后的JS对象,记录下需要对页面做的DOM操作,然后将其应用到真正的DOM树,实现视图的更新,这个过程就是Virtual DOM的核心思想

2.服务端渲染优势:首屏渲染速度更快、SEO、减少HTTP请求

十九、源码篇——util

1.env:

  • 系统判断:inBrowser、isIE9、isAndroid、isIos、isWechat
  • 属性支持:hasProto
  • 过滤属性:transitionPrep、transitionEndEvent、animationProp、animationEndEvent

2.dom:

  • dom操作:query、inDoc、before、after、prepend、extractContent、remove、replace、trimNode、isTemplate、isFragment、getOuterHTML
  • 属性操作:getAttr、getBindAttr、hasBindAttr
  • class操作:setClass、addClass、removeClass
  • 事件操作:on、off
  • 其他:cateAnchor、findRef、mapNodeRange、removeNodeRange

3.lang:

  • 对象操作:set、del、hasOwn、extend、isObject、isPlainObject、def
  • 名称转换:classify、hyphenate、camelize
  • 数组操作:indexOf
  • 类型转换:_toString、toNumber、toBoolean、toArray
  • 方法绑定:bind
  • 其他:debounce、stripQuotes、cancellable、looseEqual、isLiteral、isReserved

4.components:commonTagRe、reservedTagRe、checkComponentAttr

5.options:mergeOptions、resolveAsset

6.debug:warn

0 人点赞