uniapp的实践总结

uniapp与常规前端编码的异同
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文档
其实老的HTML标签也可以在uni-app里使用,uni-app编译器会在编译时把老标签转为新标签。但不推荐这种用法,调试H5端时容易混乱,基于元素的选择器也会出问题。
除了改动外,新增了一批手机端常用的新组件
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的变化
运行环境从浏览器变成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。
css的变化
标准的css基本都是支持的。
选择器有2个变化:*选择器不支持;元素选择器里没有body,改为了page。微信小程序即是如此。
单位方面,px无法动态适应不同宽度的屏幕,rem只能用于h5、rpx只能用于微信小程序。为此uni-app新增了 upx ,通吃所有端、所有屏幕宽度的动态单位 upx文档
uni-app推荐使用flex布局,并默认就是flex布局。这是通吃所有端的新一代布局方案,相关教程可自行百度。
注意背景图和字体文件尽量不要大于40k。会影响性能。如果非要大于40k,需放到服务器侧远程引用或base64后引入,不能放到本地作为独立文件引用。在小程序里,其实小于40k的文件在css里也无法引用,uni-app编译器在编译时自动做了处理,把小于40k的文件编译为base64方式。
工程结构和页面管理
每个可显示的页面,都必须在 pages.json 中注册。如果你开发过小程序,那么pages.json类似app.json。如果你熟悉vue,这里没有vue的路由,都是在pages.json里管理。
原来工程的首页一般是index.html或default.html,是在web server里配的。而uni-app的首页,是在pages.json里配的,page节点下第一个页面就是首页。往往在/pages/xx的目录下。
app和小程序中,为了提升体验,页面提供了原生的导航栏和底部tabbar,注意这些配置是在pages.json中做,而不是在vue页面里创建,但点击事件的监听在显示的vue页面中做。
在vue中,以前的事件监听概念改为了生命周期概念。详见uni-app生命周期
如果你熟悉小程序开发的话,对比变化如下:
原来app.json被一拆为二。页面管理,被挪入了uni-app的pages.json;非页面管理,挪入了manifest.json
原来的app.js和app.wxss被合并到了app.vue中;

编码过程中遇到的槽点
1.没有路由,所有路由都在pages目录下,且生成了pages.json, pages.json下的tabBar属性为全局底部导航, condition属性是测试用的目录, page属性的第一个为主页;

2.组件内可以直接引用week的api;

3.在temple或script或style中可以使用跨平台条件渲染的操作,

4.顶部的 tabbar 目前仅微信小程序上支持。需要用到顶部选项卡的话,建议不使用 tabbar 的顶部设置,而是自己做顶部选项卡,

5.生命周期(在路由页面监听onLoad时间,路由传参也在onLoad的形参中接收,非路由页面无法监听onLoad事件,还是监听mounted事件)

6.运用uniapp扩展的组件时,记得给外层容器大小,不好调试;

7.如果app运行在本机电脑的浏览器会有请求跨域,需要配代理,一般就运行在ide内置的浏览器就不会出现跨域的现像(但内置浏览器性能极差,最好用浏览器),

8.如果要跳转的路由是tabbar定义的,必须用switchTab方法去跳转,其他的不好使;

9.微信小程序动态绑定style坑,只能支持用对象属性的形式绑定;

10.小程序上传灰色,需要重新配置appid; 打开“project.config.json” 文件,将“appid”设置为自己的appid,然后保存并关闭文件,再次导入项目即可。

11.Webview嵌入网页在小程序端无法打开非https的地址,且所有地址均需要在后台填写;

12.如果用矢量图标;需要各种操作;

13.微信端配合自己服务器登录.

  1. 客户端获得code,并将code传给第三方服务端
    微信小程序端调用wx.login,获取登录凭证(code),并调用接口,将code发送到第三方客户端
  2. 第三方服务端用code换session_key和openid
    小程序端将code传给第三方服务器端,第三方服务器端调用接口,用code换取session_key和openid
  3. 第三方服务端生成新的session(3rd_session)
    第三方服务器端拿到请求回来的session_key和openid,先留着,不能给客户端;然后用操作系统提供的真正随机数算法生成一个新的session,叫3rd_session
  4. 第三方服务端建立对应关系,并存储
    将3rd_session作为key,微信服务端返回的session_key和openid作为值,保存起来
  5. 第三方服务端将3rd_session发送到客户端
    客户端只拿到3rd_session就够了,小程序不需要知道session_key和openid
  6. 正常请求
    小程序每次请求都将3rd_session放在请求头里,第三方服务端解析判断合法性,并进行正常的逻辑处理

14.原生安卓打包
1.生成签名证书
keytool -genkey -alias mrng -keyalg RSA -keysize 2048 -validity 36500 -keystore mrng.keystoretestalias是证书别名,可修改为自己想设置的字符,建议使用英文字母和数字
test.keystore是证书文件名称,可修改为自己想设置的文件名称
打包后无法请求接口, 真机网络请求报错request:fail abort

App-Android平台 新增 uni.request 网络请求增加参数 sslVerify,配置是否验证 ssl 证书。但建议使用普遍受信的证书而不是忽略证书校验.
15.Uniapp无法通过this. p a r e n t . f n 调用父组件的方法接收返回值 ; 暂时找到的方法是 t h i s . parent.fn调用父组件的方法接收返回值; 暂时找到的方法是this. parent.fn调用父组件的方法接收返回值;暂时找到的方法是this.emit(“Echange”, e.target.value, val => {console.log(val),父组件运行形参函数;

16.在微信小程序中,不能用id做css选择器,建议用class;

17.加载less和sass预编译,用cnpm安装环境无效,需要用Hbuilder的插件安装;

18.在小程序上线审核过程中,微信首先需要检查登录效果是否符合微信小程序标准,支付宝主要检查功能是否合规,每个平台对政务类程序上线管控比较严格;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值