vue中各选项及钩子函数执行顺序详解

下面就讲解一下“vue中各选项及钩子函数执行顺序详解”的完整攻略。

1. 选项的执行顺序

Vue中,选项的执行顺序是从外到内,也就是说,先执行全局的选项,再执行局部的选项。具体的执行顺序如下:

  1. 先执行mixin选项,以混入组件中的选项为主。
  2. 接着执行components选项,注册全局组件
  3. 之后执行directives选项,注册全局指令
  4. 然后执行filters选项,注册全局过滤器
  5. 紧接着执行extends选项,以扩展组件为主。
  6. 最后执行props、data、methods、computed、watch选项,以组件本身的选项为主。

需要注意的是,执行顺序是不可逆的,也就是说无法改变选项的执行顺序。

2. 钩子函数的执行顺序

在Vue组件生命周期中,一共有十个钩子函数,它们的执行顺序如下:

  1. beforeCreate:在实例初始化之后,数据观测(data observer)和事件配置之前被调用。在这个阶段,实例的属性和方法是不可用的。
  2. created:在实例创建完成后被立即调用。在这一步,实例已经完成了数据的观测,也可以进行初始化数据,注意不要在这里做耗时的操作。这里也可以访问到computed,watch,props和methods数据。
  3. beforeMount:在挂载开始之前被调用,即将开始渲染并将虚拟DOM挂载到页面上前调用此函数,在此步骤中,即将创建真实DOM,但是还没有渲染到页面上。
  4. mounted:实例挂载后调用。在这一步,组件已经完全被渲染出来,可以在这里执行依赖于DOM的操作,可以访问到真实的DOM元素。
  5. beforeUpdate:数据更新时调用,但是这里不能进行数据的更改操作。
  6. updated:由于数据更改导致的虚拟DOM重新渲染时调用这个函数,因为真实的DOM已经是最新的了,所以在此操作最近DOM会非常快,平常生产中建议不要在这里做过多的操作。
  7. activated:keep-alive组件激活时调用该函数。可以拿到该组件本身的props和data,执行完activated函数之后组件便是可用状态了。
  8. deactivated:keep-alive组件停用时调用该函数。可以拿到该组件本身的props和data。
  9. beforeDestroy:在实例销毁之前调用,实例仍然有能力访问所有的实例方法和数据,此时组件还没有被完全销毁。
  10. destroyed:在实例销毁之后调用,组件已经完全被销毁,执行完destroyed函数之后组件便不能被访问了。

下面提供两条具体的示例,来展示选项和钩子函数的执行顺序。

示例1:选项执行顺序

<!-- index.html -->
<body>
  <div id="app">
    <my-component></my-component>
  </div>
</body>

<!-- main.js -->
import Vue from 'vue';
import MyComponent from './components/MyComponent.vue';

Vue.mixin({
  created() {
    console.log('mixin created');
  }
});

Vue.component('my-component', MyComponent);

new Vue({
  el: '#app',
  data: {
    message: 'Hello World!'
  },
  created() {
    console.log('instance created');
  }
});

// 输出结果
// mixin created
// instance created

在这个例子中,我们通过Vue.mixin方法来注册一个全局的混合对象,并给它添加了一个created方法。然后我们通过Vue.component方法来注册一个全局组件,然后我们在Vue实例中定义了一个data属性,并且注册了一个实例中的created方法。这里需要注意的是,由于在全局组件之后定义了实例,所以实例中的created方法最后执行。

示例2:钩子函数执行顺序

<template>
  <div>
    <h1>{{ message }}</h1>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        message: 'Hello Vue!'
      }
    },
    beforeCreate() {
      console.log('beforeCreate');
    },
    created() {
      console.log('created');
    },
    beforeMount() {
      console.log('beforeMount');
    },
    mounted() {
      console.log('mounted');
    },
    beforeUpdate() {
      console.log('beforeUpdate');
    },
    updated() {
      console.log('updated');
    },
    activated() {
      console.log('activated');
    },
    deactivated() {
      console.log('deactivated');
    },
    beforeDestroy() {
      console.log('beforeDestroy');
    },
    destroyed() {
      console.log('destroyed');
    }
  }
</script>

在这个例子中,我们定义了一个MyComponent组件,并且添加了所有的生命周期钩子函数。当组件被实例化后,它们的执行顺序是:beforeCreate -> created -> beforeMount -> mounted。当组件需要更新时,它们的执行顺序是:beforeUpdate -> updated。如果组件被添加到keep-alive中并被激活,则会执行activated。如果组件被解除激活,则会执行deactivated。当组件被销毁时,执行顺序是:beforeDestroy -> destroyed。

以上就是关于“vue中各选项及钩子函数执行顺序详解”的完整攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue中各选项及钩子函数执行顺序详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue scss后缀文件background-image路径错误的解决

    当使用Vue结合SCSS编写样式时,如果在样式中设置了background-image属性,并且设置的路径存在问题,那么会导致图片无法正常加载。下面是解决该问题的完整攻略: 问题分析 样式中设置background-image属性使用的是相对路径,而在Vue项目中,其相对路径往往是相对于main.js文件或者Vue组件所在位置的路径。如果图片的相对路径出现问…

    Vue 2023年5月28日
    00
  • vue使用websocket概念及示例

    要理解Vue.js如何使用Websocket,我们需要先了解什么是Websocket。Websocket是一种实现全双工通信的协议,它允许浏览器和服务器之间实时通信,而不需要完全依靠HTTP请求响应模式。 接下来,我们将为您介绍如何在Vue.js应用程序中使用Websocket。 步骤1:安装和导入WebSocket应用程序 首先,我们需要安装Websock…

    Vue 2023年5月27日
    00
  • 基于Vue3实现日历组件的示例代码

    下面我会详细讲解基于Vue3实现日历组件的示例代码的攻略。 确定需求 在实现一个日历组件之前,我们需要先明确需求,例如我们需要的日历组件应该支持以下功能: 显示当前月份的日历 支持翻页功能,可以查看前后月份的日历 支持在日历上选择日期,并高亮选中日期 创建Vue工程 当我们确认了需求之后,就可以开始创建Vue工程了。可以通过vue-cli命令行工具来创建一个…

    Vue 2023年5月29日
    00
  • 浅析vue中常见循环遍历指令的使用 v-for

    下面我会详细讲解“浅析vue中常见循环遍历指令的使用 v-for”的完整攻略。 1. v-for指令概述 在Vue中使用v-for指令可以轻松地把一个数组或对象渲染为一组DOM元素,循环渲染过程中用户也可以做很多自定义操作,这是Vue的一大特色之一。 2. v-for指令的工作原理 v-for指令的工作原理非常简单,它只需要迭代数据源并生成每一项DOM元素,…

    Vue 2023年5月27日
    00
  • Android registerForActivityResult新用法实现两个Activity间数据传递

    我们来详细讲解一下如何使用Android registerForActivityResult新用法实现两个Activity间数据传递。 什么是registerForActivityResult registerForActivityResult是Android个10.0之后新增的 API,可以简化 startActivityForResult 的操作,并且更…

    Vue 2023年5月28日
    00
  • vue对象添加属性(key:value)、显示和删除属性方式

    下面我将详细讲解“vue对象添加属性、显示和删除属性方式”的完整攻略。 添加属性 在vue对象中添加属性通常有两种方式: 1. 直接使用this.$set方法添加属性 可以使用 this.$set(vm.property, ‘newProperty’, value) 方法来添加新的属性,其中 vm 是vue实例, property 是vue实例中已有的属性,…

    Vue 2023年5月28日
    00
  • Vue基础之侦听器详解

    Vue基础之侦听器详解 在Vue中,我们可以通过侦听器来监听组件内部数据的变化并做相应的处理。侦听器可以观察数据的变化并在变化时执行一些操作。在本篇文章中,我们将深入探讨Vue的侦听器,包括如何定义侦听器,侦听器的使用场景以及一些示例。 定义侦听器 我们可以在Vue组件内定义侦听器,在组件的watch选项中添加需要侦听的数据和相应的处理函数即可。定义侦听器的…

    Vue 2023年5月27日
    00
  • vue如何将v-for中的表格导出来

    当我们在使用Vue的v-for指令来动态渲染表格时,如何将表格导出成Excel或CSV文件呢?下面就是详细的攻略。 步骤一:安装依赖库 在Vue项目中,我们需要使用js-xlsx和file-saver这两个库来实现导出表格功能。 npm install file-saver xlsx -S 步骤二:定义数据和表头 在Vue组件中,我们需要定义要导出的数据和表…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部