小型公司网站建设论文,物流网站建设方案范文,安徽六安市地图,桃子网站1 新建页面
uni-app中的页面#xff0c;默认保存在工程根目录下的pages目录下。
每次新建页面#xff0c;均需在pages.json中配置pages列表#xff1b;
未在pages.json - pages 中注册的页面#xff0c;uni-app会在编译阶段进行忽略。pages.json的完整配置参考默认保存在工程根目录下的pages目录下。
每次新建页面均需在pages.json中配置pages列表
未在pages.json - pages 中注册的页面uni-app会在编译阶段进行忽略。pages.json的完整配置参考页面配置。
通过HBuilderX开发 uni-app 项目时在 uni-app 项目上右键“新建页面”HBuilderX会自动在pages.json中完成页面注册开发更方便。
同时HBuilderX 还内置了常用的页面模板如图文列表、商品列表等选择这些模板可以大幅提升你的开发效率。 新建页面时可以选择vue或nvue还可以选择是否创建同名目录。创建目录的意义在于如果你的页面较复杂需要拆分多个附属的js、css、组件等文件则使用目录归纳比较合适。如果只有一个页面文件大可不必多放一层目录。
2 删除页面
删除页面时需做两件工作
删除.vue文件或.nvue文件删除pages.json - pages列表项中的配置如使用HBuilderX删除页面会在状态栏提醒删除pages.json对应内容
pages.json是工程的页面管理配置文件包括页面路由注册、页面参数配置原生标题栏、下拉刷新…、首页tabbar等众多功能。
其篇幅较长另见 pages.json
3 应用首页
pages.json - pages 配置项中的第一个页面作为当前工程的首页启动页。
{pages: [{path: pages/index/index, //名字叫不叫index无所谓位置在第一个就是首页style: {navigationBarTitleText: 首页 //页面标题}},{path: pages/my,style: {navigationBarTitleText: 我的}},]
}
4 页面内容构成
uni-app 页面基于 vue 规范。一个页面内有3个根节点标签 、
templateview classcontentbutton clickbuttonClick{{title}}/button/view
/templatescriptexport default {data() {return {title: Hello world, // 定义绑定在页面上的data数据}},onLoad() {// 页面启动的生命周期这里编写页面加载时的逻辑},methods: {buttonClick: function () {console.log(按钮被点了)},}}
/scriptstyle.content {width: 750rpx;background-color: white;}
/style
4.1 template模板区
vue的template中写的全都是vue组件每个组件支持属性、事件、vue指令还可以绑定vue的data数据。
4.2 script脚本区
在vue的选项式option规范中script下包含export default {}。除了选项式还有组合式
页面级的代码大多写在export default {}中。写在里面的代码会随着页面关闭而关闭。 export default 外的代码 先来介绍写在export default {}外面的代码一般有几种情况
import三方js模块import非easycom的组件一般组件推荐使用easycom无需导入注册定义作用域更大的变量在ts/uts中对data的类型进行type定义
scriptconst TAB_OFFSET 1; // 外层静态变量不会跟随页面关闭而回收import charts from charts.ts; // 导入外部js/ts模块import swiperPage from swiper-page.vue; //导入非easycom的组件type GroupType {id : number,title : string} // 在ts中为下面data数据的 groupList 定义类型export default {components: {swiperPage}, // 注册非easycom组件data() {return {groupList: [{ id: 1, title: 第一组 },{ id: 2, title: 第二组 },] as GroupType[], // 为数据groupList定义ts类型}},onLoad() {},methods: {}}
/script
开发者应谨慎编写export default {}外面的代码这里的代码有2个注意事项
在应用启动时执行。也就是这里的代码执行时机是应用启动、而不是页面加载。如果这里的代码写的太复杂会影响应用启动速度和内存占用。不跟随页面关闭而回收。在外层的静态变量不会跟随页面关闭而回收。
export default 里的代码 export default {} 里的内容是页面的主要逻辑代码。包括几部分
datatemplate模板中需要使用的数据。data 必须声明为返回一个初始数据对象的函数注意函数内返回的数据对象不要直接引用函数外的对象。页面生命周期如页面加载、隐藏、关闭methods方法如按钮点击、屏幕滚动
如下页面代码的逻辑是
在data中定义了title初始值是点我在页面中放置了一个button组件按钮文字区使用{{}}模板写法里面写title把data里的title绑定到按钮的文字区即按钮的初始文字是点我按钮的点击事件click指向了methods里的一个方法buttonClick点击按钮即触发这个方法的执行buttonClick方法里通过this.title的方式访问data数据并重新赋值为被点了。由于vue中data和界面是双向绑定修改data中的title后因为按钮文字绑定了title会自动更新按钮的文字。
整体效果就是刚开始按钮文字是点我点一下后按钮文字变成了被点了
5 页面生命周期
uni-app 页面除支持 Vue 组件生命周期外还支持下方页面生命周期函数.
5.1 页面加载时序介绍
接下来我们介绍onLoad、onReady、onShow的先后关系页面加载的详细流程。
uni-app框架首先根据pages.json的配置创建页面 。所以原生导航栏是最快显示的。页面背景色也应该在这里配置。根据页面template里的组件创建dom。 这里的dom创建仅包含第一批处理的静态dom对于通过js更新data然后通过v-for再创建的列表数据不在第一批处理。要注意一个页面静态dom元素过多会影响页面加载速度。在uni-app x Android版本上可能会阻碍页面进入的转场动画。 因为此时页面转场动画还没有启动。触发onLoad 此时页面还未显示没有开始进入的转场动画页面dom还不存在。所以这里不能直接操作dom可以修改data因为vue框架会等待dom准备后再更新界面 在 app-uvue 中获取当前的activity拿到的是老页面的activity只能通过页面栈获取activity。 onLoad比较适合的操作是接受上页的参数联网取数据更新data。 手机都是多核的uni.request或云开发联网在子线程运行不会干扰UI线程的入场动画并行处理可以更快的拿到数据、渲染界面。 但onLoad里不适合进行大量同步耗时运算因为此时转场动画还没开始。 尤其uni-app x 在 Android上onLoad里的代码除了联网和加载图片默认是在UI线程运行的大量同步耗时计算很容易卡住页面动画不启动。除非开发者显式指定在其他线程运行。转场动画开始 新页面开始进入的转场动画动画默认耗时300ms可以在路由API中调节时长。页面onReady 第2步 创建dom是虚拟domdom创建后需要经历一段时间UI层才能完成了页面上真实元素的创建即触发了onReady。 onReady后页面元素就可以自由操作了比如ref获取节点。同时首批界面也渲染了。 注意onReady和转场动画开始、结束之间没有必然的先后顺序完全取决于dom的数量和复杂度。 如果元素排版和渲染够快转场动画刚开始就渲染好了 大多情况下转场动画走几格就看到了首批渲染内容 如果元素排版和渲染过慢转场动画结束都没有内容就会造成白屏。 联网进程从onLoad起就在异步获取数据更新data如果服务器速度够快第二批数据也可能在转场动画结束前渲染。转场动画结束 再次强调5和6的先后顺序不一定取决于首批dom渲染的速度。
5.2 页面加载常见问题
了解了页面加载时序原理我们就知道如何避免页面加载常见的问题
优化白屏的方法
页面dom太多注意有的组件写的不好会拖累整体页面。uni-app x 里减少dom数量的策略详见联网不要在onReady里那样太慢了在onLoad里早点联网在pages.json里配置原生导航栏和背景色有的页面template内容非常少整页就是一个需要联网加载的列表这会造成虽然首批dom飞快渲染了但页面其实还是白的联网后才能显示字和图。 此时需要在template里做一些简单占位组件比如loading组件、骨架屏让本地先显示一些内容。
卡住动画不启动的原因
页面dom太多注意有的组件写的不好会拖累整体页面。uni-app x 里减少dom数量的策略详见onLoad里执行了耗时的同步计算
5.3 onShow和onHide
注意页面显示是一个会重复触发的事件。a页面刚进入时会触发a页面的onShow。当a跳转到b页面时a会触发onHide而b会触发onShow。但当b被关闭时b会触发onUnload此时a再次显示出现会再次触发onShow。在tabbar页面指pages.json里配置的tabbar不同tab页面互相切换时会触发各自的onShow和onHide。
5.4 onInit
不建议使用
5.5 onReachBottom onPageScroll : function(e) { //nvue暂不支持滚动监听可用bindingx代替console.log(滚动距离为 e.scrollTop);
},
可在pages.json里定义具体页面底部的触发距离onReachBottomDistance比如设为50那么滚动页面到距离底部50px时就会触发onReachBottom事件。如使用scroll-view导致页面没有滚动则触底事件不会被触发。scroll-view滚动到底部的事件请参考scroll-view的文档onPageScroll里不要写交互复杂的js比如频繁修改页面。因为这个生命周期是在渲染层触发的在非h5端js是在逻辑层执行的两层之间通信是有损耗的。如果在滚动过程中频发触发两层之间的数据交换可能会造成卡顿。
5.6 onBackPress onBackPress上不可使用async会导致无法阻止默认返回
当用户进行以下操作时会触发该函数
Android 实体返回键 (from backbutton)顶部导航栏左边的返回按钮 (from backbutton)返回 API即 uni.navigateBack() (from navigateBack)
注意事项
只有在该函数中返回值为 true 时才表示不执行默认的返回自行处理此时的业务逻辑。
场景示例
页面中的遮罩处于显示状态时点击返回不希望直接关闭页面而是隐藏掉遮罩。遮罩隐藏后继续点击返回再执行默认的逻辑。
自定义遮罩 通常自定义的遮罩/弹出层都会做成组件这样方便复用。新建 uni-app 项目-components-mask.vue 文件代码如下
template view view classcpt-mask /view /view
/template script export default {}
/script style .cpt-mask { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: #000000; opacity: 0.5; z-index: 99; }
/style引用遮罩组件 在页面中引入 mask 自定义组件后通过一个状态值来控制其隐藏/显示。
mask v-ifshowMask/mask这里用 v-if不要用 v-show自定义组件存在一些问题待优化。
在 onBackPress 中判定当前遮罩是否处于显示状态。如果显示则关闭遮罩并返回 true。 onBackPress() {if (this.showMask) {console.log(onBackPress close mask);this.showMask false;return true;} else {uni.showModal({title: 提示,content: 自定义是否退出uni-app,success: function(res) {if (res.confirm) {// 退出当前应用改方法只在App中生效plus.runtime.quit();} else if (res.cancel) {console.log(用户点击取消);}}});return true;}},5.7 onTabItemTap onTabItemTap常用于点击当前tabitem
onTabItemTap : function(e) {console.log(e);// e的返回格式为json对象 {index:0,text:首页,pagePath:pages/index/index}
},
5.8 onNavigationBarButtonTap
点击导航栏 buttons 时触发 {fontSrc: /static/yticon.ttf,text: ,fontSize: 26,color: #303133,float: left,background: rgba(0,0,0,0),onclick: function() { [native code] },__cb__: {id: plus71692953577889,htmlId: __uniapp__service},index: 0
}6 组件生命周期 7 页面调用接口
7.1 getApp()
getApp() 函数用于获取当前应用实例VUE一般用于获取globalData。也可通过应用实例调用 App.vue methods 中定义的方法。
7.2 getCurrentPages()
getCurrentPages() 函数用于获取当前页面栈的实例以数组形式按栈的顺序给出数组中的元素为页面实例第一个元素为首页最后一个元素为当前页面。 getCurrentPages()仅用于展示页面栈的情况请勿修改页面栈以免造成页面状态错误。页面关闭时对应页面实例会在页面栈中删除。 var pages getCurrentPages();var page pages[pages.length - 1];8 页面通讯
8.1 uni.$emit(eventName,OBJECT)
触发全局的自定义事件。附加参数都会传给监听器回调。 uni.$emit(update,{msg:页面更新})
8.2 uni.$on(eventName,callback)
监听全局的自定义事件。事件可以由 uni.$emit 触发回调函数会接收所有传入事件触发函数的额外参数。 uni.$on(update,function(data){console.log(监听到事件来自 update 携带参数 msg 为 data.msg);})
8.3 uni.$once(eventName,callback)
监听全局的自定义事件。事件可以由 uni.$emit 触发但是只触发一次在第一次触发之后移除监听器。 uni.$once(update,function(data){console.log(监听到事件来自 update 携带参数 msg 为 data.msg);})
8.3 uni.$off([eventName, callback])
移除全局自定义事件监听器。 如果没有提供参数则移除所有的事件监听器如果只提供了事件则移除该事件所有的监听器如果同时提供了事件与回调则只移除这个回调的监听器提供的回调必须跟$on的回调为同一个才能移除这个回调的监听器
$emit、$on、$off常用于跨页面、跨组件通讯这里为了方便演示放在同一个页面
8.4 如何使用uni.$emit()和uni.$on() 进行页面间通讯:
监听事件
// 我的页面
onLoad(){ // 监听事件 uni.$on(login,(usnerinfo){ this.usnerinfo usnerinfo; })
},
onUnload() { // 移除监听事件 uni.$off(login); },因为事件监听是全局的所以使用 uni.$on 需要使用 uni.$off 移除全局的事件监听避免重复监听。
触发事件
// 登陆页面
uni.$emit(login, { avatarUrl: https://img-cdn-qiniu.dcloud.net.cn/uploads/nav_menu/10.jpg, token: user123456, userName: unier, login: true });使用 uni.$emit 触发事件后对应的 uni.$on 就会监听到事件触发在回调中去执行相关的逻辑。 9 路由
uni-app 有两种页面路由跳转方式使用navigator组件跳转、调用API跳转。
页面返回时会自动关闭 loading 及 toast, modal 及 actionSheet 不会自动关闭。页面关闭时只是销毁了页面实例未完成的网络请求、计时器等副作用需开发者自行处理。
10 页面栈
框架以栈的形式管理当前所有页面 当发生路由切换的时候页面栈的表现如下 文章转载自: http://www.morning.kqxwm.cn.gov.cn.kqxwm.cn http://www.morning.xnpml.cn.gov.cn.xnpml.cn http://www.morning.blfll.cn.gov.cn.blfll.cn http://www.morning.rklgm.cn.gov.cn.rklgm.cn http://www.morning.ptzf.cn.gov.cn.ptzf.cn http://www.morning.ldsgm.cn.gov.cn.ldsgm.cn http://www.morning.sqqpb.cn.gov.cn.sqqpb.cn http://www.morning.mgtrc.cn.gov.cn.mgtrc.cn http://www.morning.fksxs.cn.gov.cn.fksxs.cn http://www.morning.qbfkz.cn.gov.cn.qbfkz.cn http://www.morning.lynb.cn.gov.cn.lynb.cn http://www.morning.cmcjp.cn.gov.cn.cmcjp.cn http://www.morning.xckdn.cn.gov.cn.xckdn.cn http://www.morning.ktfnj.cn.gov.cn.ktfnj.cn http://www.morning.nrzbq.cn.gov.cn.nrzbq.cn http://www.morning.hmgqy.cn.gov.cn.hmgqy.cn http://www.morning.rdlong.com.gov.cn.rdlong.com http://www.morning.kzpy.cn.gov.cn.kzpy.cn http://www.morning.jgttx.cn.gov.cn.jgttx.cn http://www.morning.ndtzy.cn.gov.cn.ndtzy.cn http://www.morning.mymz.cn.gov.cn.mymz.cn http://www.morning.knczz.cn.gov.cn.knczz.cn http://www.morning.ylpwc.cn.gov.cn.ylpwc.cn http://www.morning.rlpmy.cn.gov.cn.rlpmy.cn http://www.morning.plxhq.cn.gov.cn.plxhq.cn http://www.morning.zsgbt.cn.gov.cn.zsgbt.cn http://www.morning.cwgn.cn.gov.cn.cwgn.cn http://www.morning.gyxwh.cn.gov.cn.gyxwh.cn http://www.morning.ppbrq.cn.gov.cn.ppbrq.cn http://www.morning.hmbtb.cn.gov.cn.hmbtb.cn http://www.morning.gnwse.com.gov.cn.gnwse.com http://www.morning.sgqw.cn.gov.cn.sgqw.cn http://www.morning.bwjgb.cn.gov.cn.bwjgb.cn http://www.morning.swkpq.cn.gov.cn.swkpq.cn http://www.morning.qhydkj.com.gov.cn.qhydkj.com http://www.morning.gqddl.cn.gov.cn.gqddl.cn http://www.morning.rbnnq.cn.gov.cn.rbnnq.cn http://www.morning.pshpx.cn.gov.cn.pshpx.cn http://www.morning.nmkfy.cn.gov.cn.nmkfy.cn http://www.morning.dwfxl.cn.gov.cn.dwfxl.cn http://www.morning.tsflw.cn.gov.cn.tsflw.cn http://www.morning.dyxlm.cn.gov.cn.dyxlm.cn http://www.morning.pngfx.cn.gov.cn.pngfx.cn http://www.morning.pylpd.cn.gov.cn.pylpd.cn http://www.morning.rqrh.cn.gov.cn.rqrh.cn http://www.morning.rpwht.cn.gov.cn.rpwht.cn http://www.morning.dwwlg.cn.gov.cn.dwwlg.cn http://www.morning.kqblk.cn.gov.cn.kqblk.cn http://www.morning.pqjpw.cn.gov.cn.pqjpw.cn http://www.morning.cjsnj.cn.gov.cn.cjsnj.cn http://www.morning.kqgqy.cn.gov.cn.kqgqy.cn http://www.morning.mgskc.cn.gov.cn.mgskc.cn http://www.morning.rkfxc.cn.gov.cn.rkfxc.cn http://www.morning.jsrnf.cn.gov.cn.jsrnf.cn http://www.morning.nnwnl.cn.gov.cn.nnwnl.cn http://www.morning.glbnc.cn.gov.cn.glbnc.cn http://www.morning.cxnyg.cn.gov.cn.cxnyg.cn http://www.morning.fzwf.cn.gov.cn.fzwf.cn http://www.morning.dyzbt.cn.gov.cn.dyzbt.cn http://www.morning.rbjth.cn.gov.cn.rbjth.cn http://www.morning.qwbls.cn.gov.cn.qwbls.cn http://www.morning.mpgfk.cn.gov.cn.mpgfk.cn http://www.morning.lkthj.cn.gov.cn.lkthj.cn http://www.morning.kmlmf.cn.gov.cn.kmlmf.cn http://www.morning.wdxr.cn.gov.cn.wdxr.cn http://www.morning.jjsxh.cn.gov.cn.jjsxh.cn http://www.morning.ldhbs.cn.gov.cn.ldhbs.cn http://www.morning.bqxxq.cn.gov.cn.bqxxq.cn http://www.morning.crsqs.cn.gov.cn.crsqs.cn http://www.morning.thlr.cn.gov.cn.thlr.cn http://www.morning.ngqty.cn.gov.cn.ngqty.cn http://www.morning.rwwdp.cn.gov.cn.rwwdp.cn http://www.morning.dbrdg.cn.gov.cn.dbrdg.cn http://www.morning.tqpds.cn.gov.cn.tqpds.cn http://www.morning.rnzgf.cn.gov.cn.rnzgf.cn http://www.morning.pqhfx.cn.gov.cn.pqhfx.cn http://www.morning.ryzgp.cn.gov.cn.ryzgp.cn http://www.morning.lydtr.cn.gov.cn.lydtr.cn http://www.morning.pqwjh.cn.gov.cn.pqwjh.cn http://www.morning.tcxk.cn.gov.cn.tcxk.cn