Vue的MVVM模型和生命周期函数(面试常问)

1. MVVM模型

MVVM(Model-view-viewmodel)是一种软件架构模式。
Vue框架的设计是受到了该模型的启发,因此在Vue的文档中,经常会使用vm(ViewModel的缩写)这个变量名表示Vue实例。

M:模型Model,对应data中的数据
V: 视图(View),模板,对应视图层·
VM: 视图模型(ViewModel):vue实例对象,连接视图和数据模型的纽带,数据模型发生了变化,vm通知视图修改;视图发生了变化,vm通知数据模型进行相对应的修改。

该模型的好处:优化页面渲染,当数据模型发生改变时,只需改变对应的视图。
在这里插入图片描述

2. 生命周期函数

Vue生命周期理解:
在这里插入图片描述
前四个生命周期只会执行一次,在created中实例初始化完成,可以访问data数据和methods,发送一些异步请求;在mounted中,实例挂载到页面上,此时可以获取dom元素,发送异步请求(如获取图表数据)。
请添加图片描述

2.1 简单案例帮助理解生命周期

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.7.10"></script>
</head>

<body>
  <div id="app">
    <div ref="container">{{msg}}</div>
  </div>
  <script>
    let vm = new Vue({
      el: "#app",
      data: {
        msg: "hello vue"
      },
      methods: {},
      beforeCreate() {
        console.log('实例初始化之前', this.msg)
      },
      created() {
        console.log('实例初始化完成,可以访问data和methods', this.msg)
      },
      beforeMount() {
        console.log('实例挂载到页面之前', this.$refs['container'])
      },
      mounted() {
        console.log('实例挂载到页面完成 可以获取dom节点和异步请求', this.$refs['container'])
      },
      beforeDestroy() {
        console.log('实例销毁之前', this.msg)
      },
      destroyed() {
        console.log('实例销毁完成', this.msg)
      },
    })
  </script>
</body>

</html>

在这里插入图片描述
实例销毁前,事件触发有效:

请添加图片描述
下面手动销毁vue实例,观察:

// 当vm 身上的 $destroy()方法被调用的时候,就开始走销毁流程
    setTimeout(() => {
      //手动销毁实例
      vm.$destroy()
    }, 4500);

4.5秒后,实例销毁完成,事件再也点击不了,证明实例销毁完成。请添加图片描述一般,除了手动销毁,vue实例是不会主动销毁的。
在这里插入图片描述

2.2 生命周期钩子函数的应用(异步请求案例)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值