MVVM的理解与Vue生命周期

一 MVVM

MVVM:Model-Veiw-VeiwModel的缩写

Model:数据模型。(也可以Model中定义数据修改和操作的业务逻辑)

Veiw:UI组件、视图。(将数据模型转化成UI展现出来)

VeiwModel:连接Model和Veiw。(监听数据模型的改变和控制视图行为、处理用户交互)

注意点:ViewModel通过双向数据绑定把Model层和Veiw层连接起来,所以View的数据变化会同步到Model,Model的数据变化也会反应到View。

二 Vue的生命周期

生命周期:Vue的实例从创建到销毁的过程,就是生命周期。

(从开始创建、初始化数据、编译模板、搭载DOM-渲染、更新-渲染、销毁等一系列过程,称之为Vue的生命周期)

作用:Vue的生命周期中有多个事件钩子,可以在控制整个Vue实例过程中更容易形成好的逻辑。

阶段:Vue的生命周期总共分为8个阶段:创建前后、载入前后、更新前后、销毁前后;

注意:

第一次加载页面会触发beforeCreate(创建前)、Created(创建后)、beforeMount(载入前)、mounted(载入后)几个阶段。

DOM渲染在mounted(载入后)中就已经完成了

补充:

beforeCreate(创建前) 在数据观测和初始化事件还未开始
created(创建后) 完成数据观测,属性和方法的运算,初始化事件,$el属性还没有显示出来
beforeMount(载入前) 在挂载开始之前被调用,相关的render函数首次被调用。实例已完成以下的配置:编译模板,把data里面的数据和模板生成html。注意此时还没有挂载html到页面上
mounted(载入后) 在el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用。实例已完成以下的配置:用上面编译好的html内容替换el属性指向的DOM对象。完成模板中的html渲染到html页面中。此过程中进行ajax交互
beforeUpdate(更新前) 在数据更新之前调用,发生在虚拟DOM重新渲染和打补丁之前。可以在该钩子中进一步地更改状态,不会触发附加的重渲染过程。
updated(更新后) 在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。
beforeDestroy(销毁前) 在实例销毁之前调用。实例仍然完全可用。
destroyed(销毁后) 在实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。

详解:

1.在beforeCreate和created之间的生命周期

beforeCreate中其vm实例中的el,data,data中的message都为undefined。

而在created中el还是undefined,而数据已经与data中的属性进行绑定(放在data中属性当值发生改变的同时,视图也会发生变化)

2.created与beforeMount之间的生命周期

首先会判断vue实例中有没有el选项,如果有的话则进行下面的编译,但是如果没有el选项,则停止生命周期,直到vue实例上调用vm.$mount(el)。

继续编译,我们来看template参数的有无对生命周期的影响

(1)如果vue实例对象中有这个参数,则把其当作模板编译成render函数

(2)如果没有这个参数,则把外部的html作为模板编译

(3)template中的模板优先级高于outer HTML模板

在Vue对象中还有render函数,它以createElement作为参数,然后做渲染操做,而且我们可以直接嵌入jsx

new Vue({

    el : "#app",

    render : function (createElement) {

        return createElement("h1","this is createElement")

    }

})

综合排名优先级: render函数选项>template选项>outer HTML

3.beforeMount与mounted之间的生命周期

在这个时期vue实例对象应该添加$el成员,并且替换掉挂在的Bom元素

beforeMount的时候就是页面中的内容还是vue中的占位符,data中的message信息没有被挂在到Bom节点中

mounted时就把vue实例中的data里的message挂载到BOM节点中去

4.beforeUpdate与updated之间的生命周期

在mounted到beforeUpdate之间当内容发生变化时触发

在beforeUpdate到updated之间会进行虚拟BOM 的重新渲染

5.beforeDestroy到destroyed之间的生命周期

beforeDestroy钩子函数在销毁实例之前调用。在这一步,实例还可以完全使用

destroyed钩子函数在Vue实例销毁后调用。调用后,卸载watcher,事件监听,子组件

参考链接:

https://segmentfault.com/a/1190000011381906

https://segmentfault.com/a/1190000011486619

https://segmentfault.com/a/1190000016344599

 

你可能感兴趣的:(vue)