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打包后的默认文件名操作

    需要修改Vue打包后的默认文件名时,我们可以通过修改webpack配置来实现。 第一步,进入vue.config.js文件,如果该文件不存在则新建一个。这个文件是用来配置Vue应用程序的,其中包含了各种自定义配置选项。 第二步,添加以下代码: module.exports = { configureWebpack: { output: { filename:…

    Vue 2023年5月28日
    00
  • Vue cli3 库模式搭建组件库并发布到 npm的流程

    下面是Vue cli3 库模式搭建组件库并发布到 npm的完整流程攻略。 1. 准备工作 1.1. 创建项目 首先,我们需要在本地创建一个 Vue 项目,可以通过 Vue CLI 3.x 提供的命令行工具来创建: vue create my-component-library 其中,my-component-library 为你的项目名称。 1.2. 配置项…

    Vue 2023年5月27日
    00
  • 关于vue中如何监听数组变化

    在Vue中,如何监听数组变化,可以通过Vue提供的一些方法或者使用第三方库来实现。下面是几种常用的方法。 使用Vue提供的$watch和$set方法 Vue提供了$watch和$set方法来监听数组的变化。 $watch $watch可以监听数组的长度变化、数组中某个元素的值的变化以及数组中元素的增删变化。下面是一个示例: // 定义一个数组 let ite…

    Vue 2023年5月28日
    00
  • Hbuilder配置Avalon和Vue指令提示的方法详解

    Hbuilder配置Avalon和Vue指令提示的方法详解 介绍 在Hbuilder中使用Avalon和Vue框架时,我们可能会遇到没有代码提示或者只有部分代码提示的问题,这会给我们的开发带来不便和困扰。本文将会详细介绍如何配置Hbuilder实现Avalon和Vue的完整代码提示。 配置步骤 安装插件 首先,在Hbuilder的插件市场中下载安装Vue和A…

    Vue 2023年5月28日
    00
  • 为nuxt项目写一个面包屑cli工具实现自动生成页面与面包屑配置

    为nuxt项目写一个面包屑cli工具是一个比较有用的开发工具,它可以自动帮助开发者根据路由配置文件自动生成对应的页面及面包屑配置文件,并且可以简化开发的流程。下面是这个工具的实现过程: 步骤一:创建nuxt插件 我们可以通过在nuxt.config.js中配置plugins选项来创建一个nuxt插件: // nuxt.config.js plugins: […

    Vue 2023年5月28日
    00
  • vuex直接赋值的三种方法总结

    我来为您详细讲解一下“vuex直接赋值的三种方法总结”的攻略。 什么是vuex直接赋值 vuex直接赋值是指在vuex的应用中,将state中的值直接赋值给页面上的某个元素或组件的值。这种方式虽然简单,但需要了解一些细节,以免不必要的错误。 vuex直接赋值的三种方式 1. computed计算属性 这种方式是最常用也是最简单的方式。在vue组件中,可以使用…

    Vue 2023年5月28日
    00
  • 详解vue组件开发脚手架

    详解Vue组件开发脚手架 简介 Vue组件开发是Vue开发中的重要一环。随着Vue的不断发展,Vue组件开发也变得越来越重要。为了方便开发者们快速构建Vue组件,我们需要一个模板或者框架。本文将详细讲解如何搭建一个Vue组件开发脚手架。 目标 我们的目标是为Vue组件开发创建一个脚手架,并且可以实现快速开发、配置简单等特点。 步骤 步骤1:安装Vue CLI…

    Vue 2023年5月28日
    00
  • Vue使用CDN引用项目组件,减少项目体积的步骤

    Vue使用CDN引用项目组件,可以减少项目体积,提高页面加载速度。下面是完整的攻略: 步骤一:引入Vue.js文件 首先,我们需要在HTML文件中引入Vue.js文件。可以从UNPKG或者cdnjs获取CDN链接。 下面是一个例子,使用了UNPKG的Vue.js文件链接: <!DOCTYPE html> <html lang="e…

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