专业的编程技术博客社区

网站首页 > 博客文章 正文

9、Vue生命周期(vue生命周期的四个阶段)

baijin 2024-10-09 07:57:38 博客文章 10 ℃ 0 评论

生命周期

学过的方法

创建阶段的四个钩子函数

运行阶段的两个钩子函数

销毁阶段的四个钩子函数

生命周期

每个Vue实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。

学过的方法

el: 这个vue实例控制的标签;

data:实例全局数据;

methods: 实例全局方法;

directives: 自定义标签指令;

components: 自定义组件template

filters:自定义过滤器;

beforeCreate:vue实例创建之前;

created: 实例创建完成之后;

beforeMount:从内存挂载到页面之前;

mounted: 挂载完成之后;

beforeUpdate:数据更新之前;

updated:更新完成之后;

beforeDestroy: 实例销毁之前;

destroyed: 实例销毁之后;

创建阶段的四个钩子函数

beforeCreate:这个函数执行的时候,表示刚初始化了一个空的实例对象,这时候只有一些默认的生命周期和默认的事件,其他的东西未创建,还有此时我们的data和mothods是没有初始化的;

created:这个函数执行的时候我们的data和mothods已经初始化好了;

beforeMount:这个函数执行的时候,说明模版已经在内存中编译好了,但是没有挂在到页面中去,页面展示的还是旧的数据;

mounted:这一步,将内存中编译好的模版替换到页面中去,此时的页面就是新数据了,整个Vue实例已经初始化完毕,此时组件已经退出创建阶段,进入运行阶段;

// 测试数据

<body>

<div id="app">

<button>cce</button>

<input type="text" name="cce" :id="'cce'" v-model="msg"/>

</div>

</body>

<script type="text/javascript">

var vm1 = new Vue({

el: "#app",

data:{

msg:"cce"

},

beforeCreate(){

console.log(`这是beforeCreate函数,此时打印data里面的msg数据为:${this.msg}`)

},

created(){

console.log(`这是created函数,此时打印data里面的msg数据为:${this.msg}`)

},

beforeMount(){

console.log(`这是beforeMount函数,此时打印id为cce的标签为:${document.getElementById('cce')}`)

},

mounted(){

console.log(`这是mounted函数,此时打印id为cce的标签为:${document.getElementById('cce')}`)

}

});

</script>

// 结果如下

// 这是beforeCreate函数,此时打印data里面的msg数据为:undefined

// index.html?__hbt=1563344941616:28 这是created函数,此时打印data里面的msg数据为:cce

// index.html?__hbt=1563344941616:31 这是beforeMount函数,此时打印id为cce的标签为:null

// index.html?__hbt=1563344941616:34 这是mounted函数,此时打印id为cce的标签为:[object HTMLInputElement]

如果要拿到data数据那么最早可以在created里面,如果要操作DOM元素那么最早可以在mounted里面;

运行阶段的两个钩子函数

beforeUpdate:当这个函数执行的时候,data里面的数据是最新的,但是页面上面的内容还是旧的,会将数据在内存中更新内存中的DOM数,但是没有更新到页面;

updated:当这个函数执行的时候,data里面和页面里面的数据都是最新的,内存中最新的DOM树更新到页面了;

// beforeUpdate

<body>

<div id="app">

<button>cce</button>

<input type="text" name="cce" v-model="msg"/>

<p :id="'cce'">{{ msg }}</p>

</div>

</body>

<script type="text/javascript">

var vm1 = new Vue({

el: "#app",

data:{

msg:"cce"

},

beforeUpdate(){

console.log(`这是beforeUpdate函数,在数据修改的时候页面上的数据是:${document.getElementById('cce').innerText}`);

console.log(`这是beforeUpdate函数,在数据修改的时候data上的数据是:${this.msg}`);

}

});

</script>

// 这是beforeUpdate函数,在数据修改的时候页面上的数据是:cce

// index.html?__hbt=1563346251778:27 这是beforeUpdate函数,在数据修改的时候data上的数据是:ccea

// update

<body>

<div id="app">

<button>cce</button>

<input type="text" name="cce" v-model="msg"/>

<p :id="'cce'">{{ msg }}</p>

</div>

</body>

<script type="text/javascript">

var vm1 = new Vue({

el: "#app",

data:{

msg:"cce"

},

update(){

console.log(`这是update函数,在数据修改的时候页面上的数据是:${document.getElementById('cce').innerText}`);

console.log(`这是update函数,在数据修改的时候data上的数据是:${this.msg}`);

}

});

</script>

// 这是beforeUpdate函数,在数据修改的时候页面上的数据是:ccea

// 这是beforeUpdate函数,在数据修改的时候data上的数据是:ccea

销毁阶段的四个钩子函数

beforeDestroy:当这个函数执行的时候,就已经从运行阶段进入到销毁阶段,实例身上所有的data和所有的motheds以及过滤器、指令等都处于可用状态;

destroyed:当这个函数执行的时候,这个组件已经被完全销毁了;

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表