标签: js uni-app


前情

uni-app是我很喜欢的跨平台框架,它能开发小程序,H5,APP(安卓/iOS),对前端开发很友好,自带的IDE让开发体验也很棒,公司项目就是主推uni-app。

坑位

最近在开发一个需求,在组件中使用了onload生命周期,导致一直未生效的问题。

Why

官方文挡的介绍是像下面这样说的 文挡说明链接

uni-app 完整支持 Vue 实例的生命周期,同时还新增 应用生命周期 及 页面生命周期。

在平时开发项目中,页面和组件的写法是一模一样的,初看我以为所有组件都会有页面生命周期和vue自带的生命周期,其实不然,只能当vue组件当页面使用时,才会有页面生命周期,而且当通过导航栏的返回键返回时,页面的onHide生命周期是不会触发的,只会触发onUnload。

解决方案

在组件里使用生命周期时,使用vue自带的生命周期即可。

测试

既然踩到这坑了,那何不做个简单测试。

关键代码

// App.vue关键测试代码如下
<script>
export default {
onLaunch: function() {
console.log('App Launch')
},
onShow: function() {
console.log('App Show')
},
onHide: function() {
console.log('App Hide')
}
}
</script> // index.vue关键测试代码如下
<script>
import helloWorld from '@/components/helloWorld.vue';
export default {
components:{
helloWorld
},
data() {
return {
title: 'Hello'
}
},
onLoad() {
console.log("index onLoad");
},
onShow() {
console.log("index onShow");
},
onReady() {
console.log("index onReady");
},
onHide() {
console.log("index onHide");
},
onUnload() {
console.log("index onUnload");
},
beforeCreate() {
console.log("index beforeCreate");
},
created() {
console.log("index created");
},
beforeMount() {
console.log("index beforeMount");
},
mounted() {
console.log("index mounted");
},
beforeUpdate() {
console.log("index beforeUpdate");
},
updated() {
console.log("index updated");
},
beforeDestroy() {
console.log("index beforeDestroy");
},
destroyed() {
console.log("index destroyed");
},
methods: {
changeTitle() {
this.title += this.title;
}
}
}
</script> // 子组件helloWorld的关键测试代码如下
<script>
export default {
data() {
return {
test: "uni-app Hello Word"
};
},
onLoad() {
console.log("hellocomp onLoad");
},
onShow() {
console.log("hellocomp onShow");
},
onReady() {
console.log("hellocomp onReady");
},
onHide() {
console.log("hellocomp onHide");
},
onUnload() {
console.log("hellocomp onUnload");
},
beforeCreate() {
console.log("hellocomp beforeCreate");
},
created() {
console.log("hellocomp created");
},
beforeMount() {
console.log("hellocomp beforeMount");
},
mounted() {
console.log("hellocomp mounted");
},
beforeUpdate() {
console.log("hellocomp beforeUpdate");
},
updated() {
console.log("hellocomp updated");
},
beforeDestroy() {
console.log("hellocomp beforeDestroy");
},
destroyed() {
console.log("hellocomp destroyed");
}
}
</script>

测试结果

  • h5端打印顺序:

  • APP端打印顺序(使用的是模拟器):

  • 小程序(微信)端打印顺序:

结论

  • 作页面使用的组件即会触发uni-app的页面生命周期,也会触发vue的生命周期
  • 非页面的vue组件只会触发了属于vue的生命周期
  • 个人推荐尽量使用vue引入的生命周期,一些特殊生命周期可以使用uni-app引入的(如onload会有一些参数传入,onShow和onHide也是属于uni-app的引入的页面生命周期)

uni-app生命周期小测的更多相关文章

  1. 微信小程序APP生命周期

    小程序APP生命周期需要先从app.js这个文件开始,App() 必须在 app.js 中调用,必须调用且只能调用一次,app.js中定义了一些应用的生命周期函数 onLaunch----当小程序初始 ...

  2. 微信小程序-APP生命周期与运行机制

    QQ讨论群:785071190 开发微信小程序之前需要先了解微信小程序运行机制以及其生命周期,小程序APP生命周期需要先从app.js这个文件开始. 阅读过"微信小程序-代码构成" ...

  3. 微信APP生命周期、页面生命周期

    目录 小程序的启动流程 app生命周期 页面的生命周期 页面的生命周期(图) 小程序的启动流程 我们画一个图来表示一下,整个小程序的启动流程,我们就知道了: app生命周期 执行App()函数也就是注 ...

  4. 14 - XML、JSON、PLIST对比和APP生命周期

    XML中间的 数据表达/传输数据的语言 优点:特别强大 强大到很多平台都有基于XML的独立语言,如MXML.HTML 缺点:传输小型数据时,特别啰嗦 size / speed = time JSON ...

  5. 微信小程序生命周期——小程序的生命周期及页面的生命周期。

    最近在做微信小程序开发,也发现一些坑,分享一下自己踩过的坑. 生命周期是指一个小程序从创建到销毁的一系列过程. 在小程序中 ,通过App()来注册一个小程序 ,通过Page()来注册一个页面. 首先来 ...

  6. vue生命周期小笔记

    一张图谨记vue每个生命周期的获取状态 beforecreate :可以在这加个loading事件 created :在这结束loading,还做一些初始化,实现函数自执行 mounted : 在这发 ...

  7. vue生命周期小总结

    beforeCreate:function(){} //组件实例化之前执行的函数 created:function(){} //组件实例化完毕,但是页面没有显示 beforeMount:functio ...

  8. iOS进阶——App生命周期

    State Description Not running The app has not been launched or was running but was terminated by the ...

  9. ecos的app生命周期

    5种变迁,安装.更新.启动.暂停.卸载,每个app都可以自行维护每种变迁 方法简单,只需要在app/$app_name目录下定义task.php文件 <?php class desktop_ta ...

  10. static变量生命周期小研究

    A页面:定义一个普通类,类包含一个静态变量a,值为:111111111111111111 B页面:修改a的值为:22222222222222 C页面:用来查看a的值 1.在vs2008中,先打开B,再 ...

随机推荐

  1. Nuxt Kit 中的上下文处理

    title: Nuxt Kit 中的上下文处理 date: 2024/9/16 updated: 2024/9/16 author: cmdragon excerpt: Nuxt Kit 提供的上下文 ...

  2. 如何使用Java在Word中插入表格

    序言 各位好啊,我是会编程的蜗牛,作为java开发者,有时候需要操作word或者excel.这里面比较常用的框架是POI,我之前用过POI来读写excel,也有用过alibaba easy excel ...

  3. [namespace hdk] diff.h

    Example cth.txt 12345 54321 114514 hdk.txt 12345 54321 114514 #include"diff.h" using names ...

  4. 北京智和信通 | 无人值守的IDC机房动环综合监控运维

    随着信息技术的发展和全面应用,数据中心机房已成为各大企事业单位维持业务正常运营的重要组成部分,网络设备.系统.业务应用数量与日俱增,规模逐渐扩大,一旦机房内的设备出现故障,将对数据处理.传输.存储以及 ...

  5. 使用 Docker 部署 MySql

    前言 虽然不建议将需要持久化的数据保存在容器中,但是自己平时做个小项目玩玩还是没什么问题的. 拉取镜像 docker pull mysql 不加 tag 的话默认从 DockerHub 拉取最新版本的 ...

  6. 4.2.2 等差数列的前n项和公式

    ${\color{Red}{欢迎到学科网下载资料学习 }}$ [ [基础过关系列]高二数学同步精品讲义与分层练习(人教A版2019)] ( https://www.zxxk.com/docpack/2 ...

  7. 10 Self-Attention(自注意力机制)

    博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...

  8. 基于 KubeSphere 的开源微服务开发平台 Pig 最佳实践

    作者:何昌涛,北京北大英华科技有限公司高级 Java 工程师,云原生爱好者. 前言 近年来,为了满足越来越复杂的业务需求,我们从传统单体架构系统升级为微服务架构,就是把一个大型应用程序分割成可以独立部 ...

  9. 全局负载均衡、CDN内容分发的原理与实践

    CDN简介 CDN的全称是Content Delivery Network,即内容分发网络.CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡.内容分发. ...

  10. 华为云云容器引擎CCE踩坑记

    前几天把在公司办公区机房的一部分业务系统迁移至华为云,在华为云上现有的kubernetes集群(云容器引擎CCE)中创建了一个命名空间,并启用了命名空间的网络隔离功能,在该命名空间中创建了一些pod- ...