2.前端框架—Vue的生命周期

Vue的生命周期☆

1. Vue实例

1.1 创建Vue实例

每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的:

var vue = new Vue({
    // 选项
 	el:"#app"
	data:{
    	name:"mm"
	},
   methods:{
                  
   }
})

1.2 模板或元素

每个Vue实例都需要关联一段Html模板,Vue会基于此模板进行视图渲染。我们可以通过el属性来指定。

<!--例如一段html模板-->
<div id="app">
    
</div>

然后创建Vue实例,关联这个div

var vm = new Vue({
	el:"#app"
})

这样,Vue就可以基于id为app的div元素作为模板进行渲染了。在这个div范围以外的部分是无法使用vue特性的。

1.3 数据data

当Vue实例被创建时,它会尝试获取在data中定义的所有属性,用于视图的渲染,并且监视data中的属性变化,当data发生改变,所有相关的视图都将重新渲染,这就是“响应式“系统。

  • name的变化会影响到input的值
  • input中输入的值,也会导致vm中的name发生改变
<!--html-->
<div id="app">
    <input type="text" v-model="name"/>
</div>
//js
var vue = new Vue({
    el:"#app",
    data:{
        name:"涛哥"
    }
})

1.4 方法methods

Vue实例中除了可以定义data属性,也可以定义方法,并且在Vue实例的作用范围内使用。

<!--html-->
<div id="app">
    {{num}}
    <button v-on:click="add"></button>
</div>
//js
var vue = new Vue({
    el:"#app",
    data:{
        num: 0
    },
    methods:{
        add:function(){
            // this代表的当前vue实例
            this.num++;
        }
    }
})

2. 生命周期钩子函数

2.1 生命周期☆

每个 Vue 实例在被创建时都要经过一系列的初始化过程 :

  • 创建实例
  • 装载模板
  • 渲染模板等等

Vue为生命周期中的每个状态都设置了钩子函数(监听函数)。每当Vue实例处于不同的生命周期时,对应的函数就会被触发调用。

生命周期:

在这里插入图片描述

2.2 钩子函数☆

  1. beforeCreated:我们在用Vue时都要进行实例化,因此,该函数就是在Vue实例化时调用,也可以将他理解为初始化函数比较方便一点,在Vue1.0时,这个函数的名字就是init
  2. created:在创建实例之后进行调用。
  3. beforeMount:页面加载完成,没有渲染。如:此时页面还是{{name}}
  4. mounted:我们可以将他理解为原生js中的window.onload=function({.,.}),或许大家也在用jquery,所以也可以理解为jquery中的$(document).ready(function(){….}),他的功能就是:在dom文档渲染完毕之后将要执行的函数,该函数在Vue1.0版本中名字为compiled。 此时页面中的{{name}}已被渲染成晓哥。
  5. beforeUpdate:组件更新之前。
  6. updated:组件更新之后。
  7. beforeDestroy:该函数将在销毁实例前进行调用 。
  8. destroyed:改函数将在销毁实例时进行调用。
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>vue生命周期</title>
    <script src="node_modules/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
    <input type="button" value="修改msg" v-on:click="msg='no'">
    <h2>{{msg}}</h2>
</div>
</body>
<script>

    var vue = new Vue({
       el:"#app",
       data:{
         msg:"ok"
       },
        methods:{
            show(){
                console.log("执行了show方法");
            }
        },
        //第一个钩子函数,data和method中的数据都没有初始化
        beforeCreate() {
            console.log(this.msg);
            this.show();
        },
        //在执行created方法的时候,data和method中的数据都已经初始化好了
        created(){
            console.log("===========================");
            console.log(this.msg);
            this.show();
        },
        //便是当前模板已经在内存中编辑完成了,但是尚未把模板渲染到页面上
        beforeMount() {
            console.log(document.getElementById("app"));
        },
        //内存中的模板已经真实的挂载到了页面中,用户已经可以看到渲染好的页面了
        mounted() {
            console.log(document.getElementById("app"));
        },
        //表示我们页面中的数据还没有更新过
        //当beforeUpdate执行的时候,页面中显示的数据还是旧的
        //此时data中的数据还是新的,页面和data中的数据还没有同步
        beforeUpdate() {
            console.log("页面上的数据内容是:"+document.getElementsByTagName("h2").innerText);
            console.log(this.msg);
        },

        //当updated执行的时候,页面中显示的数据还是新的
        //页面和data中的数据都是新的,已经同步
        updated() {
            console.log("================================");
            console.log("页面上的数据内容是:"+document.getElementsByTagName("h2").innerText);
            console.log(this.msg);
        }
    });
</script>

</html>

2.3 this

  1. 在Vue所有的生命周期钩子方法(如created,mounted, updated以及destroyed)里使用this,this指向调用它的Vue实例。
  2. 我们可以看下在vue内部的this变量是谁,我们在created的时候,打印this
        methods: {
            add: function(){
                this.num--;
                console.log(this);
            }
        },

控制台的输出:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值