Vue2
渐进式
Vue一个大特点就是渐进式,意思就是你可以渐渐地用Vue,而React几乎做不到这一点
动态构建用户界面
你可以继续操作DOM
你可以很方便地做SEO
你可以局部做单页面
你可以整体做单页面
Features
遵循MVVM
编码简洁,体积小,运行效率高,适合PC/移动端开发
本身只关注UI,可以轻松的引入Vue插件或其他第三方库
MVVM

插值表达式(仅支持单一表达式)
{{ number + 1 }}{{ obj.name }}{{ ok ? 'YES' : 'NO' }}{{ message.split('').reverse().join('') }}<div :id="list-${id}"></div>
Vue 属性
el
data
template
methods
components(global / local)
全局定义时命名不能重复
filters(global / local)
{{ message | filter }}
<div v-bind="msg | filter"></div>
watch -> single data
深层
回调触发时机
停止
即时
this.$watch
==computed -> multiple data==(不要在计算函数中做异步请求或者更改 DOM)
VS watch
computed是计算一个新属性,并将该属性挂载到vm上,而watch是监听已经存在且已挂载到vm上的属性, 计算属性不需要在 data 里面提前定义,watch 则需要,所以用watch同样可以监听computed计算属性的变化(其它还有data、props)computed本质是一个惰性求值的观察者,具有缓存性,只有当依赖变化后,第一次访问computed属性,才会计算新的值,而watch则是当数据发生变化便会调用执行函数从使用场景上说,
computed适用一个数据被多个数据影响,而watch适用一个数据影响多个数据,watch适合异步或开销大的场景
VS method
methods没有缓存computed不可传参,methods可以computed通过getter、setter传newValue
==class==
<p :class="{ active: isActive, 'text-danger': hasError }">xxx是字符串</p><p :class="classObject">xxx是对象</p><p :class="['bClass', 'cClass']">xxx是数组</p><div :class="[isActive ? activeClass : '', errorClass]"></div><div :class="[{ active: isActive }, errorClass]"></div>
==style==
<p :style="{ color: activeColor, fontSize: fontSize + 'px' }"></p><div :style="{ 'font-size': fontSize + 'px' }"></div><p :style="styleObject"></p><p :style="[baseStyles, overridingStyles]">test style2</p><div :style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"></div>
Vue 实例属性
$el、$options、$data
==$attrs、$listeners== (除了class、style、v-on等)、$props
$root、$parent、$children
$refs(操作DOM)
组件上的ref代表的是子组件实例
expose
DOM更新时机
directive
v-once、v-cloak
v-model
原生展开 :
<input :value="val" @input="val=$event.target.value" />自定义组件展开:
<CustomInput :modelValue="searchText" @update:modelValue="newValue => searchText = newValue" />
v-for、v-if、v-else、v-else-if、v-show
v-if vs v-show
==v-if > v-for==
v-text、v-html
v-slot、v-pre
==v-bind ==> :==
<div v-bind="objectOfAttrs"></div>
==v-on ==> @==
在内联事件处理器中访问事件参数
事件修饰符
stop、prevent、selfonce、capture、passive与[原生addEventListener事件相对应按键修饰符
enter、tab、delete、esc、space、up、down、left、right系统修饰符
ctrl、alt、shift、exact、meta鼠标修饰符
left、right、middle自定义事件
==自定义指令==(只有当所需功能只能通过直接的 DOM 操作来实现时,才应该使用自定义指令。其他情况下应该尽可能地使用
v-bind这样的内置指令来声明式地使用模板,这样更高效,也对服务端渲染更友好)hooks
bind 指令第一次绑定到元素时调用,只执行一次,可用于一次性初始化设置
inserted 元素插入父节点时调用
update 所有 VNode 更新时调用,可能发生在子 VNode 之前
componentUpdated 指令所在组件在 VNode 和其子 VNode 更新后调用
unbind 指令与元素解绑时调用
参数
el指令绑定元素,可操作 DOMbinding指令描述对象value:传递给指令的值。例如在v-my-directive="1 + 1"中,值是2oldValue:之前的值,仅在beforeUpdate和updated中可用。无论值是否更改,它都可用arg:传递给指令的参数 (如果有的话)。例如在v-my-directive:foo中,参数是"foo"modifiers:一个包含修饰符的对象 (如果有的话)。例如在v-my-directive.foo.bar中,修饰符对象是{ foo: true, bar: true }instance:使用该指令的组件实例dir:指令的定义对象
vnode代表绑定元素的底层 VNodeprevNode:之前的渲染中代表指令所绑定元素的 VNode。仅在beforeUpdate和updated钩子中可用
==表单输入绑定==

t 基础用法
值绑定
表单事件修饰符
v-model:lazy、v-model:number、v-model:trim自定义model
==组件(global / local)==
属性
==传递props==
单向数据流
props初始化先于data,可挂载到子实例data上
校验(null和undefined会通过任何类型验证)
原生属性自动挂载到组件根元素上,可设置
inheritAttrs = false不继承Non-props
.sync
特殊属性
class / style / ref / key
事件
修饰符事件,应用于原生html元素
普通事件
emits
插槽
默认内容
具名插槽
作用域插槽(父组件需要访问子组件的data的时候)
默认插槽
具名插槽
动态组件
异步组件
DOM 模板解析注意事项
大小写
闭合标签
元素位置显示
穿透scoped
在模板中使用两次style标签
使用
>>>或/deep/操作符(Sass之类的预处理器无法正确解析>>>)
生命周期
beforeCreate/created、beforeMount/mounted、beforeUpdate/updated、beforeDestroyed/destroyed、errorCaptured
activated/deactivated、errorCaptured
Vue优化
编码阶段
尽量减少data中的数据,data中的数据都会增加getter和setter,会收集对应的watcher
v-if和v-for不能连用
如果需要使用v-for给每项元素绑定事件时使用事件代理
SPA 页面采用keep-alive缓存组件
在更多的情况下,使用v-if替代v-show
key保证唯一
使用路由懒加载、异步组件
防抖、节流
第三方模块按需导入
长列表滚动到可视区域动态加载
图片懒加载
SEO优化
预渲染
服务端渲染SSR
打包优化
压缩代码
Tree Shaking/Scope Hoisting
使用cdn加载第三方模块
多线程打包happypack
splitChunks抽离公共文件
sourceMap优化
用户体验
骨架屏
PWA
还可以使用缓存(客户端缓存、服务端缓存)优化、服务端开启gzip压缩等
Last updated