uni-app(初篇)

想为自己做一个多端通用的,纠结了很久,也尝试了一周,最终还是决定用 uni-app。毕竟自己是个人全栈,精力有限,只能寻找性价比最高的解决方案。如果是大型企业应用,不要用uni-app,还是用各端的原生开发。uni-app既然是多端复用,一定是牺牲了性能,想都不用想。

以下为个人收藏:

为了多端通吃,uni-app进行了一些调整,比如

组件/标签的变化

以前是html标签,现在是小程序标签

  • div 改成 view
  • span、font 改成 text
  • a 改成 navigator
  • img 改成 image
  • input 还在,但type属性改成了confirmtype
  • form、button、checkbox、radio、label、textarea、canvas、video 这些还在。
  • select 改成 picker
  • iframe 改成 web-view
  • ul、li没有了,都用view替代
  • audio 不再推荐使用,改成api方式,背景音频api文档

除了改动外,新增了一批手机端常用的新组件

  • scroll-view 可区域滚动视图容器
  • swiper 可滑动区域视图容器
  • icon 图标
  • rich-text 富文本(不可执行js,但可渲染各种文字格式和图片)
  • progress 进度条
  • slider 滑块指示器
  • switch 开关选择器
  • camera 相机
  • live-player 直播
  • map 地图
  • cover-view 可覆盖原生组件的视图容器 cover-view需要多强调几句,uni-app的非h5端的video、map、canvas、textarea是原生组件,层级高于其他组件。如需覆盖原生组件,比如在map上加个遮罩,则需要使用cover-view组件

js的变化

js的变化,分为运行环境变化、数据绑定模式变化、api变化3部分。

运行环境从浏览器变成v8引擎
标准js语法和api都支持,比如if、for、settimeout、indexOf等。
浏览器专用的window、document、navigator、location对象,只有在浏览器中才有,app和小程序都不支持
可能有些人以为js等于浏览器里的js。其实js是ECMAScript组织管理的,浏览器中的js是w3c组织基于js规范补充了window、document、navigator、location等专用对象。
在uni-app的各个端中,除了h5端,其他端的js都运行在一个独立的v8引擎下,不是在浏览器中,所以浏览器的对象无法使用。如果你做过小程序开发,对此应当很了解。
这意味着依赖document的很多HTML的库,比如jqurey无法使用。
当然app和小程序支持web-view组件,里面可以加载标准HTML,这种页面仍然支持浏览器专用对象window、document、navigator、location。

数据绑定

小程序的数据绑定参考了vue,但自己修改了一些。在uni-app中只支持标准的vue,不支持小程序的数据绑定语法
小程序里的setData在uni-app里并不存在,因为vue是自动双向数据绑定的。直接通过赋值方式修改数据,如果数据绑定到界面上,界面会自动更新渲染

js api的变化

  • uni-app的api是参考小程序的,所以和浏览器的js api有很多不同,如
  • alert,confirm 改成 uni.showmodel
  • ajax 改成 uni.request
  • cookie、session 没有了,local.storage 改成 uni.storage
  • uni-app的js api还有很多,但基本就是小程序的api,把wx.xxx改为 uni.xxx 即可

css的变化

单位方面

px无法动态适应不同宽度的屏幕,rem只能用于h5、rpx只能用于微信小程序。为此uni-app新增了 upx

布局

uni-app推荐使用flex布局,并默认就是flex布局。这是通吃所有端的新一代布局方案。

一个uni-app工程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
┌─components            uni-app组件目录
│ └─comp-a.vue 可复用的a组件
├─hybrid 存放本地网页的目录
├─platforms 存放各平台专用页面的目录
├─pages 业务页面文件存放的目录
│ ├─index
│ │ └─index.vue index页面
│ └─list
│ └─list.vue list页面
├─static 存放应用引用静态资源(如图片、视频等)的地方,注意:静态资源只能存放于此
├─main.js Vue初始化入口文件
├─App.vue 应用配置,用来配置App全局样式以及监听
├─manifest.json 配置应用名称、appid、logo、版本等打包信息
└─pages.json 配置页面路由、导航条、选项卡等页面类信息
  • 每个可显示的页面,都必须在 pages.json 中注册。pages.json 就是小程序中的 app.json。
  • 原来工程的首页一般是index.html或default.html,是在web server里配的。而uni-app的首页,是在pages.json里配的,page节点下第一个页面是首页。往往在/pages/xx的目录下。
  • 为了提升体验,页面提供了原生的导航栏和底部tabbar,注意这些配置是在pages.json中做,而不是在vue页面里创建,但点击事件的监听在显示的vue页面中做。

与小程序相比

原来app.json被一拆为二。页面管理,被挪入了uni-app的pages.json;非页面管理,挪入了manifest.json

原来的app.js和app.wxss被合并到了app.vue中

坚持原创技术分享,您的支持将鼓励我继续创作!