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日

相关文章

  • Windows系统恢复系统默认的环境变量图文教程

    下面是详细讲解“Windows系统恢复系统默认的环境变量图文教程”的完整攻略。 Windows系统恢复系统默认的环境变量 什么是环境变量? 环境变量指的是在操作系统中已经存在的一些具有全局意义的变量,可以被所有的程序所访问和使用。在Windows操作系统中,环境变量主要分为两类:用户环境变量和系统环境变量。用户环境变量是针对当前用户的环境变量,而系统环境变量…

    other 2023年6月27日
    00
  • Python中关键字global和nonlocal的区别详解

    Python中关键字global和nonlocal的区别详解 在Python中,global和nonlocal是两个关键字,用于在函数内部访问和修改外部作用域的变量。它们的使用方式和作用范围有所不同,下面将详细解释它们的区别。 global关键字 global关键字用于在函数内部声明一个变量为全局变量,使得该变量可以在函数内外进行访问和修改。具体使用方式如下…

    other 2023年7月29日
    00
  • Android 读取Properties配置文件的小例子

    下面让我来详细讲解“Android 读取Properties 配置文件的小例子”的完整攻略。 什么是Properties配置文件 Properties是Java类库提供的一种用于操作配置文件的类。它提供读取和写入简单键值对的功能。通常情况下,Properties用于存储应用程序的设置,例如数据库连接、日志级别、服务器地址等。 Properties配置文件的格…

    other 2023年6月25日
    00
  • vue项目中使用rem替换px的实现示例

    下面我来详细讲解一下在Vue项目中使用rem替换px的具体实现攻略。 什么是rem 如果你对rem的概念还比较陌生,那么简单来说,rem就是相对于根节点(html或body)设置的字体大小。也就是说,我们设置元素的长度、宽度、边框等样式属性时,直接使用rem就能够根据根节点设置的字体大小来进行自适应,达到了适配不同屏幕尺寸的效果。 实现步骤 接下来,我会详细…

    other 2023年6月27日
    00
  • Android学习小结之Activity保存和恢复状态

    在Android中,可以通过保存和恢复状态来确保在Activity生命周期发生变化时保留数据和用户界面的状态。以下是一个完整的攻略,用于学习如何在Activity中保存和恢复状态: 保存状态: 在Activity中,重写onSaveInstanceState方法。在该方法中,使用Bundle对象保存需要保留的数据。 java @Override protec…

    other 2023年9月5日
    00
  • spring中AOP 注解开发示例详解

    针对“spring中AOP 注解开发示例详解”的完整攻略,我将分为以下几个部分进行讲解: 1. AOP 概述 AOP,即 Aspect Oriented Programming,面向切面编程,是一种程序设计的思想,可以让程序逻辑分散到各个部分,从而增加代码的可维护性和辅助性。Spring框架提供了完善的AOP实现,可以通过纯Java编写切面代码,实现统一的业…

    other 2023年6月27日
    00
  • Go语言中的Array、Slice、Map和Set使用详解

    下面是对“Go语言中的Array、Slice、Map和Set使用详解”的完整攻略。 1. Array 1.1 简介 在Go语言中,数组是一种固定大小的数据结构,表示相同类型的元素的有序集合。 数组的定义方式为: var arr [n]type 其中,n表示数组的大小,type表示数组中元素的类型。 1.2 示例 下面是一个将数组进行遍历的示例: packag…

    other 2023年6月20日
    00
  • vim recording

    Vim Recording Vim是一种功能强大的文本编辑器,它为用户提供了许多方便快捷的编辑方式,并且可以使用插件扩展其功能。在Vim中,记录宏是一项非常有用的功能。它可以让用户记录一系列命令,然后将它们应用到文件的其他部分。在这篇文章中,我们将介绍Vim中的录制宏功能。 如何录制宏 您可以通过以下步骤来录制宏: 打开Vim并进入“正常”模式 按下q键,然…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部