vue2.0 vue实例的生命周期

news/2024/7/10 0:48:27 标签: vue, js, javascript

每个 Vue 实例在被创建之前都要经过一系列的初始化过程。例如,实例需要配置数据观测(data observer)、编译模版、挂载实例到 DOM ,然后在数据变化时更新 DOM 。

下图展示的就是一个vue实例对象的生命周期。

           

 

从图上我们可以看到vue在生命周期中有这些状态,beforeCreate,created,beforeMount,mounted,beforeUpdate,updated,beforeDestroy,destroyed

Vue在实例化的过程中,会调用这些生命周期的钩子,给我们提供了执行自定义逻辑的机会。那么,在这些vue钩子中,vue实例到底执行了那些操作,我们先看下面执行的例子

 

复制代码

var vm = new Vue({
    el: "#container",
    data: {
        test : 'hello world'
    },
    beforeCreate: function(){
        console.log(this);
        showData('创建vue实例前',this);
    },
    created: function(){
        showData('创建vue实例后',this);
    },
    beforeMount:function(){
        showData('挂载到dom前',this);
    },
    mounted: function(){
        showData('挂载到dom后',this);
    },
    beforeUpdate:function(){
        showData('数据变化更新前',this);
    },
    updated:function(){
        showData('数据变化更新后',this);
    },
    beforeDestroy:function(){
        vm.test ="3333";
        showData('vue实例销毁前',this);
    },
    destroyed:function(){
        showData('vue实例销毁后',this);
    }

});

function realDom(){
    console.log('真实dom结构:' + document.getElementById('container').innerHTML);
}
function showData(process,obj){
    console.log(process);
     console.log('data 数据:' + obj.test)
     console.log('挂载的对象:')
     console.log(obj.$el)
     realDom();
     console.log('------------------')
     console.log('------------------')
}

复制代码

我们可以看到,vue对象初始化过程中,会执行到beforeCreate,created,beforeMount,mounted 这几个钩子的内容

beforeCreate :数据还没有监听,没有绑定到vue对象实例,同时也没有挂载对象

created :数据已经绑定到了对象实例,但是还没有挂载对象

beforeMount: 模板已经编译好了,根据数据和模板已经生成了对应的元素对象,将数据对象关联到了对象的 $el属性,$el属性是一个HTMLElement对象,也就是这个阶段,vue实例通过原生的createElement等方法来创建这个html片段,准备注入到我们vue实例指明的el属性所对应的挂载点

mounted:将$el的内容挂载到了el,相当于我们在jquery执行了$(el).html($el),生成页面上真正的dom,上面我们就会发现dom的元素和我们$el的元素是一致的。在此之后,我们能够用方法来获取到el元素下的dom对象,并进 行各种操作

 

当我们的data发生改变时,会调用beforeUpdate和updated方法

 

beforeUpdate :数据更新到dom之前,我们可以看到$el对象已经修改,但是我们页面上dom的数据还没有发生改变

updated: dom结构会通过虚拟dom的原则,找到需要更新页面dom结构的最小路径,将改变更新到dom上面,完成更新

 

实例的销毁

 

beforeDestroy,destroed :实例的销毁,vue实例还是存在的,只是解绑了事件的监听还有watcher对象数据与view的绑定,即数据驱动


http://www.niftyadmin.cn/n/1619141.html

相关文章

VUE3.0从零开始-创建项目(2)

1.创建项目 vue create vue3-app 2.运行项目 npm run serve 3.访问项目

VUE3.0从零开始-生命周期(3)

1.与vue2版本不同点 与 2.x 版本生命周期相对应的组合式 API beforeCreate -> 使用 setup() created -> 使用 setup() beforeMount -> onBeforeMount mounted -> onMounted beforeUpdate -> onBeforeUpdate updated -> onUpdated beforeDestro…

VUE3.0从零开始-响应式api(4)

1.reactive与ref 被响应式api标记过的数据才可以成为响应式数据 2.ref--用来标记简单类型数据 如果用ref对象/数组, 会自动将对象/数组转换为reactive的代理对象 ref的数据操作: 在js中要.value, 在模板中不需要(内部解析会自动添加.value) 3.reactive—标记复杂类型数据(…

VUE3.0从零开始-Element-plus和Axios初始化(5)

1.Element-plus 使用cli安装 vue add element-plus,安装完成之后多了几个文件。 可以看看官网:https://element-plus.gitee.io/#/zh-CN/component/installation 2.安装Axios 使用cli安装 axios http请求框架 npm install axios 3.axios基础使用方法&a…

VUE3.0从零开始-登陆页面(6)

1.新建login.vue页面和login.js 页面 2.配置路由 3.去element-plus网站把想要的按钮控件复制下来,放到login.vue里面 https://element-plus.gitee.io/#/zh-CN/component/message 4.编写css脚本。 5.setup 方法 6.最终效果图。

VUE3.0从零开始-主页面左侧菜单(6)

1.新建vue页面。 2.配置路由。 3.找布局组件。 先找全局的布局,再找上面分2块的布局。然后自己加点样式。 https://element-plus.gitee.io/#/zh-CN/component/menu 4.左侧菜单 先找布局组件,再配置好路由,再编写脚本。 5.子路由设计 6.最终…

VUE3.0从零开始-右侧主要内容(7)

1.Element UI 找到表格控件,分页控件,复制代码到自己页面上。 2.按照需求需要内容。 3.新建可以访问数据的api 4.编写脚本代码。 5.最终效果。

VUE3.0从零开始-打包发布到IIS(终)

1.在终端上 输入npm run build 2.生成dist文件夹&#xff0c;里面的内容就是打包压缩好的文件 3.新建web.config 文件到dist下面&#xff0c;把下面的内容复制进去。 <?xml version"1.0" encoding"UTF-8"?> <configuration> <system.w…