简述MVVM
什么是MVVM?
视图模型双向绑定
,是Model-View-ViewModel
的缩写,也就是把MVC
中的Controller
演变成ViewModel。Model
层代表数据模型,View
代表UI组件,ViewModel
是View
和Model
层的桥梁,数据会绑定到viewModel
层并自动将数据渲染到页面中,视图变化的时候会通知viewModel
层更新数据。以前是操作DOM结构更新视图,现在是数据驱动视图
。
MVVM的优点:
1.低耦合
。视图(View)可以独立于Model变化和修改,一个Model可以绑定到不同的View上,当View变化的时候Model可以不变化,当Model变化的时候View也可以不变;
2.可重用性
。你可以把一些视图逻辑放在一个Model里面,让很多View重用这段视图逻辑。
3.独立开发
。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计。
4.可测试
。
Vue的生命周期
每个Vue
实例在创建时都会经过一系列的初始化过程,vue
的生命周期钩子,就是说在达到某一阶段或条件时去触发的函数,目的就是为了完成一些动作或者事件
create阶段
:vue实例被创建
beforeCreate
: 最初调用触发,创建前,此时data和methods中的数据都还没有初始化,data和events都不能用
created
: 创建完毕,data中有值,未挂载,data和events已经初始化好,data已经具有响应式;在这里可以发送请求
mount阶段
: vue实例被挂载到真实DOM节点
beforeMount
:在模版编译之后,渲染之前触发,可以发起服务端请求,去数据,ssr中不可用,基本用不上这个hook
mounted
: 在渲染之后触发,此时可以操作DOM,并能访问组件中的DOM以及$ref,SSR中不可用
update阶段
:当vue实例里面的data数据变化时,触发组件的重新渲染\
beforeUpdate
:更新前,在数据变化后,模版改变前触发,切勿使用它监听数据变化
updated
:更新后,在数据改变后,模版改变后触发,常用于重渲染案后的打点,性能检测或触发vue组件中非vue组件的更新
destroy阶段
:vue实例被销毁
beforeDestroy
:实例被销毁前,组件卸载前触发,此时可以手动销毁一些方法,可以在此时清理事件、计时器或者取消订阅操作
destroyed
:卸载完毕后触发,销毁后,可以做最后的打点或事件触发操作
vue组件的通信方式
-
props
/$emit
父子组件通信父->子
props
,子->父$on、$emit
获取父子组件实例parent、children
Ref
获取实例的方式调用组件的属性或者方法 父->子孙Provide、inject
官方不推荐使用,但是写组件库时很常用 -
$emit
/$on
自定义事件 兄弟组件通信Event Bus
实现跨组件通信Vue.prototype.$bus = new Vue()
自定义事件 -
vuex 跨级组件通信
Vuex、
$attrs、$listeners
Provide、inject