vue的生命周期有哪些?

Vue.js组件的生命周期钩子可以分为8个阶段,分别是:

1.beforeCreate:实例刚被创建,属性和方法还未绑定和监听,此时还不能访问到 data、computed、watch、methods等属性和方法。

实例刚被创建,此时还不能访问到 data、computed、watch、methods等属性和方法,主要用于在实例被创建之前进行一些初始化工作,比如设置一些默认值,加载一些外部数据等。例如

export default {
  beforeCreate() {
    console.log('组件实例刚被创建');
    // 设置默认值
    this.count = 0;
    // 加载外部数据
    this.$http.get('/api/data').then(response => {
      this.data = response.data;
    });
  }
}

2.created:实例已经创建完成,属性和方法已经绑定和监听,但是此时还不能访问到 $el属性,因为它还没有被挂载到DOM上。

实例已经创建完成,属性和方法已经绑定和监听,但是此时还不能访问到 $el属性,因为它还没有被挂载到DOM上。主要用于在实例被创建之后进行一些异步操作,比如获取数据、初始化插件等。例如:

export default {
  created() {
    console.log('组件实例已经创建完成');
    // 异步操作
    this.$http.get('/api/data').then(response => {
      this.data = response.data;
    });
    // 初始化插件
    this.$refs.carousel.init();
  }
}

3.beforeMount:在挂载之前被调用,此时已经完成了编译模板的过程,但是还没有把编译后的模板替换到页面中去。

在挂载之前被调用,此时已经完成了编译模板的过程,但是还没有把编译后的模板替换到页面中去。主要用于在模板被挂载到页面之前进行一些操作,比如修改DOM节点、计算一些样式等。例如

export default {
  beforeMount() {
    console.log('模板编译完成,但是还没有被挂载到页面');
    // 修改DOM节点
    this.$el.style.display = 'none';
    // 计算样式
    this.style = {
      width: this.width + 'px',
      height: this.height + 'px',
      backgroundColor: this.color
    };
  }
}

4.mounted:实例已经被挂载到页面中,此时可以访问到 $el 属性,并且 $el已经对应了真实的DOM元素。

实例已经被挂载到页面中,此时可以访问到 $el 属性,并且 $el已经对应了真实的DOM元素。主要用于在模板被挂载到页面之后进行一些操作,比如初始化第三方插件、绑定事件等。例如:

export default {
  mounted() {
    console.log('模板已经被挂载到页面中');
    // 初始化插件
    this.$refs.carousel.init();
    // 绑定事件
    this.$el.addEventListener('click', this.handleClick);
  }
}

5.beforeUpdate:在数据更新之前被调用,此时可以在更新之前访问到数据和DOM。

在数据更新之前被调用,此时可以在更新之前访问到数据和DOM,主要用于在数据更新之前进行一些操作,比如获取最新数据、修改DOM节点等。例如:

export default {
  beforeUpdate() {
    console.log('数据即将更新');
    // 获取最新数据
    this.$http.get('/api/data').then(response => {
      this.data = response.data;
    });
    // 修改DOM节点
    this.$el.style.display = 'none';
  }
}

6.updated:实例已经完成了数据的更新,此时可以访问到更新后的数据和DOM。

实例已经完成了数据的更新,此时可以访问到更新后的数据和DOM,主要用于在数据更新之后进行一些操作,比如修改样式、重新计算属性等。例如:

export default {
  updated() {
    console.log('数据已经更新');
    // 修改样式
    this.$el.style.backgroundColor = this.color;
    // 重新计算属性
    this.total = this.items.reduce((sum, item) => sum + item.price, 0);
  }
}

7.beforeDestroy:在实例销毁之前被调用,此时实例还可以访问到 data、computed、watch、methods等属性和方法。

在实例销毁之前被调用,此时实例还可以访问到 data、computed、watch、methods等属性和方法,主要用于在实例被销毁之前进行一些清理工作,比如取消定时器、解绑事件等。例如:

export default {
  beforeDestroy() {
    console.log('组件实例即将被销毁');
    // 取消定时器
    clearInterval(this.timer);
    // 解绑事件
    this.$el.removeEventListener('click', this.handleClick);
  }
}

8.destroyed:实例已经被销毁了,此时无法再访问到 data、computed、watch、methods等属性和方法。

实例已经被销毁了,此时无法再访问到 data、computed、watch、methods等属性和方法,主要用于在实例被销毁之后进行一些清理工作,比如释放内存、销毁第三方插件等。例如:

export default {
  destroyed() {
    console.log('组件实例已经被销毁');
    // 释放内存
    this.data = null;
    // 销毁第三方插件
    this.$refs.carousel.destroy();
  }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不可大东

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值