1、MVVM(model-view-viewmodel|模型-视图-视图模型)
视图和模型是不能直接通信的,通过viewmodel通信。数据变化,viewmodel能监听数据的变化,通知视图变化;用户操作视图的时候,viewmodel也能通知数据做改动,数据的双向绑定。
2、生命周期钩子
- beforeCreate--在Vue实例创建之前执行的函数。
- created--实例创建完成后调用。
- beforeMount--在vue实例创建之后,数据未渲染时负责接管DOM之前执行的函数。
- mounted--el挂载到实例上后调用,一般第一个业务逻辑会在这里开始。
- beforeDestory--实例销毁之前调用,主要解绑一些使用addEventListener监听的事件。
- destroyed--vue实例在执行vm.destriyed()命令之后,销毁之后执行的函数。
- beforeUpdate--在vue实例数据更新之前执行的函数。
- updated--在vue实例数据更新之后执行的函数。
3、计算属性和方法
- 计算属性:只有在相关依赖发生改变时才会重新求值,用方法的话,无论属性是否改变都会重新执行,增加了系统开销。
- 计算属性调用不能使用括号,调用方法需要加上括号。
- 计算属性一般在数据量比较大、比较耗时的情况下使用(例如搜索),只有虚拟DOM和真是DOM不同的情况下才会执行cpmputed。
- 计算属性默认只有getter,不过在需要的时候也可以使用setter。
4、侦听属性
当监听的数据为对象或数组时,newValue和oldValue是相等的,因为对象和数组都为引用类型,这两个的形参指向的也是同一个数据对象。
和计算属性比较:
- 计算属性的结果会被缓存起来,只有依赖的属性发生变化的时候才会重新计算,必须返回一个数据,主要用来进行纯数据的操作。
- 监听器主要用来监听某个数据的变化,从而去执行某些具体的回调业务逻辑,不仅仅局限于返回数据。
5、过滤器(不能改变原始值)
可以串联使用,也可增加参数。
6、用key管理
vue会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染,不想复用的话,可以添加一个具有唯一值的key属性即可。
7、v-show
带v-show的元素始终会被渲染并保留在DOM中,它只是简单地切换元素的css属性display,不支持template语法,也不支持v-else。
v-show和v-if区别:
- v-if是真正的条件渲染,是惰性的,直到条件变为真才开始渲染,更高的切换开销。
- v-show不管初始条件,总是渲染元素,基于css,更高的初始渲染开销。
8、vue响应式和数据双向绑定
vue数据双向绑定过程:当把一个js对象传给vue实例的data选项,vue将遍历此对象所有属性,并用Object.defineProperty()把这些属性全部转为getter/setter。每个组件实例都有相应的watcher实例对象,会在组件渲染过程中把属性记录为依赖,之后当依赖项的setter被调用时,会通知watcher重新计算,使和它关联的组件更新,视线数据data变化,更新视图view。
若一个对象的属性没有在data中声明,那他就不是响应式的。
9、修饰符
事件修饰符
- .stop--在子元素使用,阻止事件冒泡。
- .capture--在父元素使用,与冒泡相反,事件捕获由外到内。
- .self--跳过冒泡事件和捕获事件,会监视事件是否直接作用在元素上。
- .once--需要只执行一次的操作。
- .prevent--阻止默认行为。
- .passive--执行默认行为。
按键修饰符
- keydown--键盘按键按下时触发。
- keyup--键盘按键抬起时触发。
- keypress--键盘按键按下抬起间隔期间触发。
表单修饰符
- .lazy--失去焦点或者按下enter键才更新。
- .number--将输入的值转为number类型。
- .trim--自动过滤用户输入的首尾空格。
10、vue的data选项必须是一个函数 vue的data选项必须是一个函数,因此每个实例可以维护一份被返回对象的独立的拷贝。
11、webpack
12、项目脚手架vue-cli
使用vue-cli 3.x创建的项目如何实现跨域请求? 可以直接利用Node.js代理服务器,通过修改vue proxyTable接口实现跨域请求。在Vue-cli项目中的config文件夹下的index.js配置文件中。