uni-app 教程


https://uniapp.dcloud.net.cn/tutorial/#开发规范

概念简介

开发规范

  • 页面文件遵循 Vue 单文件组件 (SFC) 规范
  • 组件标签靠近小程序规范,详见uni-app 组件规范
  • 接口能力(JS API)靠近微信小程序规范,但需将前缀 wx 替换为 uni,详见uni-app接口规范
  • 数据绑定及事件处理同 Vue.js 规范,同时补充了App及页面的生命周期
  • 为兼容多端运行,建议使用flex布局进行开发

工程

目录结构

  • uniCloud 云空间目录,阿里云为uniCloud-aliyun,腾讯云为uniCloud-tcb(详见uniCloud)

  • components 符合vue组件规范的uni-app组件目录

    • comp-a.vue 可复用的a组件
  • hybrid App端存放本地html文件的目录,详见

  • platforms 存放各平台专用页面的目录,详见

  • pages 业务页面文件存放的目录

    • index
      • index.vue index页面
    • list
      • list.vue list页面
  • static 存放应用引用的本地静态资源(如图片、视频等)的目录,注意:静态资源只能存放于此

  • uni_modules 存放uni_module规范的插件。

  • wxcomponents 存放小程序组件的目录,详见

  • main.js Vue初始化入口文件

  • App.vue 应用配置,用来配置App全局样式以及监听 应用生命周期

  • manifest.json 配置应用名称、appid、logo、版本等打包信息,详见

  • pages.json 配置页面路由、导航条、选项卡等页面类信息,详见

  • uni.scss 这里是uni-app内置的常用样式变量

  • tips

    • HbuilderX 1.9.0+ 支持在根目录创建 ext.json、sitemap.json 等小程序需要的文件。
    • platforms 目录下的有效目录

页面

页面简介

  • uni-app项目中,一个页面就是一个符合Vue SFC规范的.vue文件或.nvue文件
    • .vue页面和.nvue页面,均全平台支持,差异在于当uni-app发行到App平台时,.vue文件会使用webview进行渲染,.nvue会使用原生进行渲染

新建页面

  • pages.json的完整配置参考:全局文件。
  • 通过HBuilderX开发 uni-app 项目时,在 uni-app 项目上右键“新建页面”,HBuilderX会自动在pages.json中完成页面注册

生命周期

  • uni-app 支持如下页面生命周期函数
    • 仅百度小程序基础库 3.260 以上支持 onInit 生命周期
    • 不依赖页面传参的逻辑可以直接使用 created 生命周期替代
    • onReachBottom使用注意 可在pages.json里定义具体页面底部的触发距离onReachBottomDistance
    • onPageScroll里不要写交互复杂的js,比如频繁修改页面。因为这个生命周期是在渲染层触发的,在非h5端,js是在逻辑层执行的,两层之间通信是有损耗的。
      • nvue暂不支持滚动监听,可用bindingx代替
    • 如果想实现滚动时标题栏透明渐变,在App和H5下,可在pages.json中配置titleNView下的type为transparent
    • 如果需要滚动吸顶固定某些元素,推荐使用css的粘性布局,参考插件市场
    • 在App、微信小程序、H5中,也可以使用wxs监听滚动,参考;在app-nvue中,可以使用bindingx监听滚动,参考
    • onBackPress上不可使用async,会导致无法阻止默认返回
    • onTabItemTap常用于点击当前tabitem,滚动或刷新当前页面。如果是点击不同的tabitem,一定会触发页面切换
      • 如果想在App端实现点击某个tabitem不跳转页面,不能使用onTabItemTap,可以使用plus.nativeObj.view (opens new window)放一个区块盖住原先的tabitem,并拦截点击事件
      • 支付宝小程序平台onTabItemTap表现为点击非当前tabitem后触发,因此不能用于实现点击返回顶部这种操作