uni-app开发注意事项
关于vue
1、注意 如果使用老版的非自定义组件模式,即manifest中"usingComponents":false
,部分模版语法不支持,但此模式已于2019年11月起下线。
2、data
必须声明为返回一个初始数据对象的函数;否则页面关闭时,数据不会自动销毁,再次打开该页面时,会显示上次数据。
3、class 支持的语法:
<view :class="{ active: isActive }">111</view>
<view class="static" v-bind:class="{ active: isActive, 'text-danger': hasError }">222</view>
<view class="static" :class="[activeClass, errorClass]">333</view>
<view class="static" v-bind:class="[isActive ? activeClass : '', errorClass]">444</view>
<view class="static" v-bind:class="[{ active: isActive }, errorClass]">555</view>
style 支持的语法:
<view v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">666</view>
<view v-bind:style="[{ color: activeColor, fontSize: fontSize + 'px' }]">777</view>
4、非H5端不支持 Vue官方文档:Class 与 Style 绑定 中的 classObject
和 styleObject
语法。
5、注意:以:style=""这样的方式设置px像素值,其值为实际像素,不会被编译器转换为相对单位。
此外还可以用 computed
方法生成 class
或者 style
字符串,插入到页面中
6、用在组件上非H5端暂不支持,在自定义组件上使用 Class
与 Style
绑定
7、如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如 <input>
中的输入内容,<switch>
的选中状态),需要使用 :key
来指定列表中项目的唯一的标识符。
:key
的值以两种形式提供
- 使用
v-for
循环array
中item
的某个property
,该property
的值需要是列表中唯一的字符串或数字,且不能动态改变。 - 使用
v-for
循环中item
本身,这时需要item
本身是一个唯一的字符串或者数字
当数据改变触发渲染层重新渲染的时候,会校正带有 key
的组件,框架会确保他们被重新排序,而不是重新创建,以确保使组件保持自身的状态,并且提高列表渲染时的效率。
如不提供 :key,会报一个 warning, 如果明确知道该列表是静态,或者不必关注其顺序,可以选择忽略。
8、在H5平台 使用 v-for 循环整数时和其他平台存在差异,如 v-for="(item, index) in 10"
中,在H5平台 item 从 1 开始,其他平台 item 从 0 开始,可使用第二个参数 index 来保持一致。
9、在非H5平台 循环对象时不支持第三个参数,如 v-for="(value, name, index) in object"
中,index 参数是不支持的。
10、为兼容各端,事件需使用 v-on
或 @
的方式绑定,请勿使用小程序端的bind
和 catch
进行事件绑定。
11、事件修饰符
.stop
:各平台均支持, 使用时会阻止事件冒泡,在非 H5 端同时也会阻止事件的默认行为.prevent
仅在 H5 平台支持.self
:仅在 H5 平台支持.once
:仅在 H5 平台支持.capture
:仅在 H5 平台支持.passive
:仅在 H5 平台支持
12、若需要禁止蒙版下的页面滚动,可使用 @touchmove.stop.prevent="moveHandle"
,moveHandle 可以用来处理 touchmove 的事件,也可以是一个空函数。
13、H5 的select 标签用 picker 组件进行代替
14、表单元素 radio 用 radio-group 组件进行代替
15、App端(vue页面V3编译模式)和H5端支持v-html,其他端不支持v-html。
16、uni-app只支持vue单文件组件(.vue 组件)。其他的诸如:动态组件,自定义 render
,和<script type="text/x-template">
字符串模版等,在非H5端不支持。
17、详细的非H5端不支持列表:
Slot
(scoped
暂时还没做支持)- 动态组件
- 异步组件
inline-template
X-Templates
keep-alive
transition
(可使用 animation 或 CSS 动画替代)- 老的非自定义组件编译模式不支持在组件引用时,在组件上定义
click
等原生事件、v-show
(可用v-if
代替)和class
style
等样式属性(例:<card class="class-name"> </card>
样式是不会生效的)。建议更新为自定义组件模式 - 老的非自定义组件编译模式组件里使用
slot
嵌套的其他组件时不支持v-for
。建议更新为自定义组件模式
18、uni-app
内置了小程序的所有组件,比如: picker
,map
等,需要注意的是原生组件上的事件绑定,需要以 vue
的事件绑定语法来绑定,如 bindchange="eventName"
事件,需要写成 @change="eventName"
19、Vue.component
的第一个参数必须是静态的字符串。
20、nvue页面暂不支持全局组件
21、在百度小程序中使用时,不要在 data 内使用 hidden ,可能会导致渲染错误
22、由于 onError
并不是完整意义的生命周期,所以只提供一个捕获错误的方法,在 app
的根组件上添加名为 onError
的回调函数即可
23、当重复设置某些属性为相同的值时,不会同步到view层。 例如:每次将scroll-view组件的scroll-top属性值设置为0,只有第一次能顺利返回顶部。 这和props的单向数据流特性有关,组件内部scroll-top的实际值改动后,其绑定的属性并不会一同变化。,可以通过监听scroll事件,记录组件内部变化的值,在设置新值之前先设置为记录的当前值
跨端开发注意事项
1、非H5端不支持*选择器;
2、body的元素选择器请改为page,同样,div和ul和li等改为view、span和font改为text、a改为navigator、img改为image...
3、非H5端默认并未启用 scoped,如需要隔离组件样式可以在 style 标签增加 scoped 属性,H5端为了隔离页面间的样式默认启用了 scoped
4、vue页面在App端,默认是被系统的webview渲染的(不是手机自带浏览器,是rom的webview),在较老的手机上,比如Android4.4、5.0或iOS8,很多css是不支持的,所以不要使用太新的css,会导致界面异常。
5、原生组件层级问题 H5没有原生组件概念问题,非H5端有原生组件并引发了原生组件层级高于前端组件的概念,要遮挡video、map等原生组件,请使用cover-view组件。
6、使用了非H5端不支持的API 小程序和App的js运行在jscore下而不是浏览器里,没有浏览器专用的js对象,比如document、xmlhttp、cookie、window、location、navigator、localstorage、websql、indexdb、webgl等对象。
7、不要在引用组件的地方在组件属性上直接写 style="xx",要在组件内部写样式
8、url(//alicdn.net)
等路径,改为url(https://alicdn.net)
,因为在App端//是file协议
9、v-html在h5和app-vue(v3编译模式)均支持,但小程序不支持
10、在 uni-app 2.4.7 以前,H5端不支持微信小程序自定义组件,即wxcomponets下的组件,此时可能产生兼容问题。从 2.4.7 起,H5也支持微信自定义组件,不再存在这这方面兼容问题。
11、在微信小程序端,uni-app
将数据绑定功能委托给Vue
,开发者需按Vue 2.0
的写法实现数据绑定,不支持微信小程序的数据绑定写法,
12、非H5端,不能使用浏览器自带对象,比如document、window、localstorage、cookie等,更不能使用jquery等依赖这些浏览器对象的框架。因为各家小程序快应用都不支持这些对象。
13、App端若要使用操作window、document的库,需要通过renderjs来实现。
14、uni-app的tag同小程序的tag,和HTML的tag不一样,比如div要改成view,span要改成text、a要改成navigator。
15、虽然大部分css样式在微信小程序和app中都可以支持,但推荐使用flex布局模型,这种布局更灵活高效且支持更多平台(比如nvue、快应用只支持flex布局)
16、单位方面,uni-app默认为rpx。这是一种可跨端的通用单位
17、每个要显示的页面,都要放到pages目录下,新建一个页面所在的目录,然后放同名目录的vue文件,比如project/pages/lista/lista.vue,并且在pages.json里配置。这与小程序的策略相同。
18、自定义组件,放到component目录
19、静态资源如图片,固定放到static目录下。这是webpack、mpvue的规则
20、H5 校验了更严格的 vue
语法,有些写法不规范会报警,比如: data
后面写对象会报警,必须写 function
;不能修改 props
的值;组件最外层 template
节点下不允许包含多个节点等。
21、APP 和小程序的导航栏和 tabbar
均是原生控件,元素区域坐标是不包含原生导航栏和 tabbar
的;而 H5 里导航栏和 tabbar
是 div 模拟实现的,所以元素坐标会包含导航栏和tabbar的高度。为了优雅的解决多端高度定位问题,uni-app
新增了2个css变量:--window-top
和 --window-bottom
,这代表了页面的内容区域距离顶部和底部的距离。举个实例,如果你想在原生tabbar
上方悬浮一个菜单,之前写 bottom:0
。这样的写法编译到 h5 后,这个菜单会和 tabbar
重叠,位于屏幕底部。而改为使用 bottom:var(--window-bottom)
,则不管在 app 下还是在h5下,这个菜单都是悬浮在 tabbar
上浮的。这就避免了写条件编译代码。当然仍然也可以使用 H5 的条件编译处理界面的不同。
22、CSS 內使用 vh
单位的时候注意 100vh
包含导航栏,使用时需要减去导航栏和 tabBar
高度,部分浏览器还包含浏览器操作栏高度,使用时请注意。
23、组件内(页面除外)不支持 onLoad
、onShow
等页面生命周期。
24、为避免和内置组件冲突,自定义组件请加上前缀(但不能是 u 和 uni)。比如可使用的自定义组件名称:my-view
、m-input
、we-icon
,例如不可使用的自定义组件名称:u-view
、uni-input
,如果已有项目使用了可能造成冲突的名称,请修改名称,另外微信小程序下自定义组件名称不能以 wx 开头。
25、小程序工具提示vendor.js过大,已经跳过es6向es5转换。这个转换问题本身不用理会,因为vendor.js已经是es5的了。
关于体积控制,参考如下:
- 使用运行时代码压缩
HBuilderX
创建的项目勾选运行-->运行到小程序模拟器-->运行时是否压缩代码
cli
创建的项目可以在pacakge.json
中添加参数--minimize
,示例:"dev:mp-weixin": "cross-env NODE_ENV=development UNI_PLATFORM=mp-weixin vue-cli-service uni-build --watch --minimize"
- 使用分包优化,关于分包优化的说明
uni-app开发注意事项的更多相关文章
- Android N 新特性 + APP开发注意事项
1. 多窗口MultiWindow 多窗口MultiWindow,这是Android N里对开发者影响比较大的特性,也是大家疑问比较多的地方.站在开发者的角度其实不必太担心这个特性会导致我们需要修改很 ...
- Web App开发注意事项
1.首先我们来看看webkit内核中的一些私有的meta标签,这些meta标签在开发webapp时起到非常重要的作用 <meta content=”width=device-width, ini ...
- WEB APP 开发标签
第一个meta标签表示:强制让文档的宽度与设备的宽度保持1:1,并且文档最大的宽度比例是1.0,且不允许用户点击屏幕放大浏览: 第二个meta标签是iphone设备中的safari私有meta标签,它 ...
- app开发外包注意事项,2017最新资讯
我们见过很多创业者,栽在这app外包上.很多创业者对于app外包这件事情不是特别重视,以为将事情交给app外包公司就完事了,实际上不是的.无论是从选择app外包公司还是签订合同.售后维护等各方面都有许 ...
- app外包开发注意事项大全『最新』
随着移动互联网的高速发展,很多互联网创业公司或传统向互联网转型的公司都急需发开一款app软件,多数公司会选择让外包公司来开发.问题来了,App外包市场鱼龙混杂,我们要如何在这里面选择一个靠谱的公司,这 ...
- 跨平台移动APP开发进阶(一)mui开发注意事项
mui开发注意事项 Mui HTML5开发框架 mui是一个高性能的HTML5开发框架,从UI到效率,都在极力追求原生体验:这个框架自身有一些规则,刚接触的同学不很熟悉,特总结本文:想了解mui更详细 ...
- 开发一个App要多少钱?APP开发报价单,APP开发外包有哪些注意事项-广州达到信息www.ddapp.com.cn
来源:广州达到信息著作权归广州达到信息所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作为一个APP开发从业者,经常会有人问到:开发一个App要多少钱?下面针对这个问题来好好解答解答正经的谈 ...
- 选择App开发外包时,你该了解哪些法律常识?
随着App需求的激增,选择App外包服务的客户也多了起来.然而客户和开发方对于其中的法律条款却不甚了解,导致在服务过程中,时常会发生一些分歧和纠纷,最终致使项目搁浅. 为了普及App外包的法律常识,移 ...
- Android APP开发笔记
环境搭建 windows系统上需要以下软件: android SDK -- app开发工具包, 开发运行环境(包括SDK管理工具,和虚拟设备管理). JDK -- java 开发工具包, 负责app代 ...
随机推荐
- go genetlink demo
原文链接:https://github.com/mdlayher/genetlink [root@wangjq test]# cat genetlink.go package main import ...
- Hibernate在MySQL中查询区分大小写
MySQL查询中默认是不区分大小写的,比如如下语句: SELECT * from PersonBehDevice where flag=0 AND devicecode ='ddjc' 查询结果如下: ...
- GPU虚拟机创建时间深度优化
桔妹导读:GPU虚拟机实例创建速度慢是公有云面临的普遍问题,由于通常情况下创建虚拟机属于低频操作而未引起业界的重视,实际生产中还是存在对GPU实例创建时间有苛刻要求的业务场景.本文将介绍滴滴云在解决 ...
- Spring Security 入门学习--数据库认证和授权
首先是使用的SpringBoot框架 基础需要的pom以来如下,基础的springboot项目的创建就不一一赘述了. <!--spring web--> <dependency> ...
- 焦大:seo该研究用户需求还是搜索算法
http://www.wocaoseo.com/thread-62-1-1.html 上一篇博客我写了用户需求点是做seo排名最首要关注的东西,其实这个我在以前也一直说的,seo有两大核心,一个是检索 ...
- Vue基础(五)---- 前端路由
基本结构: ◆ 1.路由的基本概念与原理 ◆ 2.vue-router的基本使用 ◆ 3.vue-router嵌套路由 ◆ 4.vue-router动态路由匹配 ◆ 5.vue-router命名路由 ...
- 【新鲜出炉的个人项目】基于 Flink 的商品推荐系统
FlinkCommodityRecommendationSystem Recs FlinkCommodityRecommendationSystem(基于 Flink 的商品推荐系统) 1. 前言 系 ...
- Vue根据条件添加 click 事件
方式一:在绑定事件中直接添加标示量clickFlag <div @click="clickFlag && addGoodsHandler()"> XXX ...
- 性能提升40%: 腾讯 TKE 用 eBPF 绕过 conntrack 优化 K8s Service
Kubernetes Service 用于实现集群中业务之间的互相调用和负载均衡,目前社区的实现主要有userspace,iptables和IPVS三种模式.IPVS模式的性能最好,但依然有优化的空间 ...
- row_number()分页返回结果顺序不确定
之前通过row_number()实现分页查询时: select top [PageSize] * from ( select row_number() over (order by id desc) ...