Vue 生命周期和数据共享详解

Vue 生命钩子函数:
- created:在实例创建后调用;
- mounted:挂载后调用;
- updated:数据更新时调用;
- destroyed:实例销毁后调用。

数据共享指的是在 Vue 实例中通过 props 和 events 实现父子组件之间的数据传递,具体如下:

  • 通过 props 把子组件需要的数据从父组件传到子组件;
  • 通过事件机制将子组件产生的数据传回到父组件。

下面是一个完整的 Vue 生命周期和数据共享攻略:

Vue 生命周期与数据共享详解

生命周期

Vue 生命周期是 Vue 实例在创建、更新、销毁等过程中所经历的一系列环节,这些环节组成了 Vue 的生命周期。生命周期图示如下:

          |  create  |        |        |        |        |
          |  setup   |        |        |        |        |
          |  beforeMount  |        |        |        |        |
          |       mounted    |        |        |        |        |
          |       beforeUpdate |  updated  |        |        |
          |       deactivated    |      activated     |    |
          |       beforeUnmount |        |      unmounted  |

created 生命周期

在实例创建后调用,此时实例已经完成了数据初始化,但尚未挂载到 DOM 树上。

示例:

<div id="app"></div>
let vm = new Vue({
  el: '#app',
  data: {
    message: 'Hello world!'
  },
  created: function () {
    console.log('vm created', this.message);
  }
});

mounted 生命周期

在模板挂载到 DOM 节点上后调用,此时组件已经完成渲染并初始化其他设定。

示例:

<div id="app">
  <button v-on:click="clickHandler">Click me</button>
</div>
let vm = new Vue({
  el: '#app',
  data: {
    message: 'Hello world!'
  },
  methods: {
    clickHandler: function() {
      console.log('Button clicked');
    }
  },
  mounted: function () {
    console.log('vm mounted', this.$el);
  }
});

updated 生命周期

在组件更新数据并且重新渲染 DOM 后调用,此时组件已经完成了更新操作。

示例:

<div id="app">
  <p>{{ message }}</p>
  <button v-on:click="changeMessage">Change message</button>
</div>
let vm = new Vue({
  el: '#app',
  data: {
    message: 'Hello world!'
  },
  methods: {
    changeMessage: function() {
      this.message = 'Hello Vue!';
    }
  },
  updated: function () {
    console.log('vm updated', this.$el);
  }
});

destroyed 生命周期

在组件被销毁时调用,此时组件已经从 DOM 树中移除,并且在此之前还会执行 beforeDestroy 生命周期钩子函数。

示例:

<div id="app">
  <p v-if="show">Show me when button clicked.</p>
  <button v-on:click="toggleShow">Toggle show</button>
</div>
let vm = new Vue({
  el: '#app',
  data: {
    show: true
  },
  methods: {
    toggleShow: function() {
      this.show = !this.show;
    }
  },
  beforeDestroy: function () {
    console.log('vm beforeDestroy', this.$el);
  },
  destroyed: function () {
    console.log('vm destroyed', this.$el);
  }
});

数据共享

父组件向子组件传递数据

父组件可以通过 props 选项向子组件传递数据,示例如下:

父组件:

<div id="app">
  <child-component message="Hello world!"></child-component>
</div>
Vue.component('child-component', {
  props: ['message'],
  template: '<p>{{ message }}</p>'
});

子组件:

<p>Hello world!</p>

子组件向父组件传递数据

子组件可以通过 $emit 方法向父组件传递数据,示例如下:

父组件:

<div id="app">
  <child-component v-on:change="changeHandler"></child-component>
  <p>{{ message }}</p>
</div>
let vm = new Vue({
  el: '#app',
  data: {
    message: 'Hello world!'
  },
  methods: {
    changeHandler: function(newMessage) {
      this.message = newMessage;
    }
  }
});

Vue.component('child-component', {
  template: '<button v-on:click="clickHandler">Change message</button>',
  methods: {
    clickHandler: function() {
      this.$emit('change', 'Hello Vue!');
    }
  }
});

子组件:

<button>Change message</button>

在以上攻略中,我们先讲解了 Vue 生命周期,通过示例代码详细讲解了各个生命周期函数的执行时机和相关操作;接着,我们讲解了数据共享,也通过示例代码讲解了 props 和 $emit 等相关用法,以便读者更好理解和掌握这些内容。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue 生命周期和数据共享详解 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • .NET Smobiler的复杂控件的由来与创造

    .NET Smobiler的复杂控件的由来与创造 背景介绍 .NET Smobiler是基于.NET Framework开发的移动端应用程序开发框架,在.NET Smobiler中,我们可以使用大量的控件来构建自己的应用,包括简单的控件,如文本框、按钮等,以及复杂的控件,如ListView、GridView、Chart等等。本文将详细介绍.NET Smobi…

    other 2023年6月26日
    00
  • 隐藏在SQLServer 字段中的超诡异字符解决过程

    让我来详细讲解一下“隐藏在SQLServer 字段中的超诡异字符解决过程”的完整攻略。 背景 在使用SQLServer进行开发时,有时我们会遇到一些奇怪的字符问题,比如说输入数据时,产生乱码或者无法识别的字符。这些问题很可能是因为输入了一些隐藏的字符导致的。 解决过程 第一步:查找异常字符 在解决这类问题时,首先需要找出哪些字符是异常的。我们可以使用以下两种…

    other 2023年6月26日
    00
  • uefishell-简单认识

    以下是关于UEFI Shell的简单认识的完整攻略,包括基本知识和两个示例说明。 基本知识 UEFI Shell是一种基于UEFI(统一固件接口)的命令行界面,它提供了一组用于管理计算机硬件和软件的命令。UEFI Shell通常用于调试和维护计算机系统,例如在没有操作系统的情况下更新固件或诊断硬件问题。 UEFI Shell的命令语法类似于命令提示符或Lin…

    other 2023年5月7日
    00
  • Windows Server 2019 FTP服务的配置与管理(FTP工作原理、简单介绍与ftp安装,新建与测试)

    以下是详细讲解“Windows Server 2019 FTP服务的配置与管理”的攻略。 1. FTP工作原理以及简单介绍 FTP(File Transfer Protocol)是一种基于TCP/IP协议来进行文件传输的协议,它能够让用户在不同的计算机之间通过网络传输文件。FTP是一种标准协议,常用于网站管理、远程文件传输等。 2. FTP安装 在Windo…

    other 2023年6月27日
    00
  • Laravel Eloquent ORM 实现查询表中指定的字段

    Laravel 是一款流行的 PHP Web 开发框架,它包含了许多强大的功能,其中 Eloquent ORM 是其中一项非常重要的特性。本文将详细讲解如何使用 Eloquent ORM 实现查询指定表中的指定字段。 1. 定义模型 在使用 Eloquent ORM 进行查询之前,需要先定义对应的模型。Laravel 会根据模型类的设置自动映射到指定的数据表…

    other 2023年6月26日
    00
  • 颜色的rgb值表示法

    颜色的RGB值表示法 在网页设计中,颜色的表示是非常重要的。常用的颜色表示方法有颜色名、十六进制等,而本文将介绍一种常用的颜色表示方法——RGB值表示法。 RGB值介绍 RGB,即红、绿、蓝三种颜色的缩写,利用它们的强度组合而成。在HTML中,RGB值可以用于设置文字、背景色等。 RGB值由三个数字组成,分别表示红、绿、蓝三种颜色的强度。每种颜色的强度范围从…

    其他 2023年3月28日
    00
  • bcg界面库

    以下是“BCG界面库”的完整攻略: BCG界面库 BCG界面库是一种用于创建Windows应用程序的C++界面库。它提供了一组于使用的控件和工具,可以帮助您速创建现代化的Windows应用程序。本攻略将介绍如何使用BCG界面库。 步骤1:下载和安装BCG面库 要使用BCG界面库,您需要先下载和安装它。您可以从BCG界面库的官方网站上下载最新的BCG界面库,并…

    other 2023年5月7日
    00
  • Java优先队列 priority queue

    Java优先队列 priority queue 完整攻略 Java中的优先队列是一种特殊的队列,它允许在添加元素时指定一个优先级,并且在取出元素时总是取出当前队列中优先级最高的元素。内部实现采用堆来维护元素的优先级,时间复杂度为 O(log n)。 基本使用方法 Java提供了PriorityQueue类来实现优先队列,其默认是按照元素的自然顺序来排序的,也…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部