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

yizhihongxing

下面就讲解一下“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.js数据绑定之data属性

    下面是关于Vue.js数据绑定之data属性的完整攻略。 Vue.js数据绑定之data属性 在Vue.js中,我们可以通过data属性实现数据的双向绑定,在数据发生变化的时候,视图会自动更新。本文主要讲解Vue.js数据绑定之data属性相关的知识点,包括:声明data属性、双向绑定的注意事项、如何在Vue组件中使用data属性等。 声明data属性 我们…

    Vue 2023年5月28日
    00
  • 这15个Vue指令,让你的项目开发爽到爆

    下面我将详细介绍“这15个Vue指令,让你的项目开发爽到爆”的完整攻略。 一、官方指令 1. v-if、v-else、v-else-if v-if:如果条件为true,则渲染元素。 v-else:如果在同一父元素中的 v-if 或 v-else-if 的条件不成立,则渲染元素。 v-else-if:在同一元素上添加一个条件,如果前面所有的 v-if 和 v-…

    Vue 2023年5月29日
    00
  • vue 使用el-table循环轮播数据列表的实现

    下面是详细讲解“vue 使用el-table循环轮播数据列表的实现”的完整攻略。 Vue中使用El-table渲染数据 在Vue中,可以使用Element UI提供的表格组件el-table来渲染数据列表。el-table非常适用于多种不同的场景,包括但不限于数据展示、数据分页、搜索等等,而且具有非常丰富的功能和定制化选项。 要使用el-table渲染数据列…

    Vue 2023年5月29日
    00
  • JS实现调用本地摄像头功能示例

    下面是关于JS实现调用本地摄像头功能的完整攻略: 1、需求分析 在Web前端应用中,有时需要使用到调用本地摄像头的功能。比如视频聊天、视频录像等等。因此,我们需要学习如何使用JS来调用本地摄像头,并将摄像头拍摄的视频数据展示在Web页面上。 2、使用getUserMedia实现调用本地摄像头 HTML5提供了一个功能强大的API——getUserMedia,…

    Vue 2023年5月28日
    00
  • element step组件在另一侧加时间轴显示

    要在Element-UI的Step组件中添加时间轴,可以参考以下步骤: 安装moment.js: npm install moment 在需要添加时间轴的组件里的data属性中添加一个新的属性timeline(这里建议使用moment.js管理时间): data(){ return{ timeline: [ { time: moment().subtract…

    Vue 2023年5月29日
    00
  • Vue前端判断数据对象是否为空的实例

    当我们在Vue前端开发中需要判断数据对象是否为空时,可以使用以下方法: 使用Object.keys()方法判断 我们可以使用Object.keys()方法获取一个对象中所有的属性,然后再判断属性的数量是否为0来判断对象是否为空。示例代码如下: <template> <div> <button @click="testE…

    Vue 2023年5月28日
    00
  • vue+elementUI实现简单日历功能

    下面是“vue+elementUI实现简单日历功能”的完整攻略。 1.实现方式简介 我们将使用Vue.js框架和ElementUI组件库来实现简单的日历功能。具体来说,我们将使用ElCalendar组件显示日历,并使用Vue实例中的数据绑定功能来控制日历的显示和行为。 2.安装Vue.js和ElementUI 在开始之前,您需要在您的项目中安装Vue.js和…

    Vue 2023年5月29日
    00
  • 自定义vue组件发布到npm的方法

    首先,创建一个Vue组件库需要进行如下几个步骤: 步骤一:创建Vue组件项目 使用Vue CLI创建一个新的Vue项目: # 全局安装 Vue CLI npm install -g @vue/cli # 创建一个Vue项目 vue create my-vue-components 之后按照提示选择预设项目配置即可。 步骤二:编写Vue组件 在src/comp…

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