Vue题1

124 阅读3分钟

MVVM

Model:数据层

View:视图层,即用户界面

ViemModel:视图数据层,MVVM的核心,主要把Model数据转换进行第二次封装,达到View符合的视图数据模型,ViewModel所封装出来的数据模型包括视图的状态和行为,而Model层的数据模型只有状态,即页面这一块展示什么视图,那一块展示什么视图,而页面加载进来后显示的和点击时发生的就属于视图行为(交互),行为和状态都封装在ViewModel数据模型中,这样就可以实现双向数据绑定,我们只需要去维护ViewModel,不用再去操纵DOM更新视图

MVVM优点

可以实现单向数据绑定和双向数据绑定

单向数据绑定:更新ViewModel时,视图也更新

双向数据绑定:在单向数据绑定的基础上,View变化,ViewModel变化也进行变化

缺点:

1.对于双向数据绑定,当看到视图出现异常时,不能确定是View出现BUG还是Model出现BUG

2.对于大型Model,长时间持有会造成浪费内存

3.对于大型图形应用程序,视图较多,构建和维护ViewModel的成本也会提高

Vue生命周期

Vue实例有一个完整的生命周期,从开始创建、初始化数据,编译模板,挂载DOM->渲染,更新->渲染,卸载等一系列过程,成为Vue的生命周期

beforeCreate、create、beforeMounted、mounted、beforeUpdate、updata、activited、deactivited、beforeDestory、destoryed

在第一次创建页面时会用到的钩子

beforeCreate、create、beforeMounted、mounted
钩子 时间
beforeCreate 创建前,实例初始化后,还不能获得Dom节点,data、computed.watch、methods上的方法和数据都还不能访问,可以加载loading事件
created 创建后,实例已经创建,完成数据初始化,导入依赖,Loading加载完成,可以进行异步请求(过多会导致白屏时间过长),未挂在DOM,若想操作DOM需要用Vue.nextTick()
beforeMounte 挂在前,虽然得不到具体DOM,但是vue挂载根节点已创建,
mounted 完成挂载DOM和渲染,可以对挂载的DOM进行操作,
beforeUpdata 数据更新前,数据驱动DOM
updata 数据更新后,完成虚拟DOM的重新渲染
activated 在使用vue-route时,会使用<keep-alive></keep-alive>来缓存组件状态,created就不会重复调用
deactivated <keep-alive></keep-alive>组件被移除时用
beforeDestory 销毁前,可以做一些提示
destory 销毁,组件被删除

异步请求适合在哪个周期?

官方是在mounted,实际也可以在created生命周期调用

vue组件如何进行通信?

1、props/$emit+v-on:通过props自上而下进行数据传递,通过$emit+v-on向上传递信息

2、$children、$parent:不常用

3、provide/inject:vue2.2.0新增api,父组件通过provide提供变量,子组件通过inject注入变量


4、ref/refs:在普通DOM上指向DOM元素,在子组件使用,指向组件实例,可以通过实例直接调用组件的方法或访问数据

5、EventBus:通过EventBus进行信息的发布和订阅

6、vuex:全局数据管理库,管理数据流

7.localstorage/sessionStorage:数据比较混乱不容易维护

8、$attrs/$listeners:在vue2.4中加入$attrs和$listeners进行跨级通信

总结; 父子之间:props; children/parent;provide/inject;ref;attrs/listeners

兄弟之间:vuex;eventBus

跨级:vuex;$attrs/$listeners;eventBus;provide/inject