uView注意事项

简介: uView注意事项

由于uni-app支持多端开发,而各端,特别是各小程序平台,没有统一的标准,加重了开发者和企业的成本,幸好uni-app使用Vue标准,对各端进行了写法的统一, 推动了生态的发展,但是由于某些小程序平台自身的原因,仍然会出现某些兼容性问题,我们会将制作uView过程中遇到,和平时收集的兼容性问题呈现在本专题,希望能 帮助到uni-app开发者。

#微信小程序

注意

微信小程序基础库需要设置在2.19.2及以上

#支付宝小程序

注意

uView需要开启了component2模式才支持支付宝小程序

  1. 支付宝在很早前,已升级为component2模式,此模式支持更多的功能和特性,uni-app上,很多的特性,如provide/inject$slots等,需要开启此模式才能支持, 而此模式在uni-app新建项目中默认是关闭的,因而需要在项目根目录的manifest.json中开启,如没有alipay属性节点,新增即可:
......
"mp-alipay" : {
  "component2": true
},
......

copy

  1. uView的waterfall瀑布流组件使用了$scoped slot特性,由于hx的问题,在hx2.8.2修正了此问题,所以瀑布流组件需要hx2.8.2及以上才支持支付宝小程序。

#Vue特性在各平台支持度

  1. 以下特性,uView已对各小程序开发工具,H5浏览器,APP(不含NVUE)进行过实测,均获得支持,其中支付宝小程序需要开启component2模式。
App(vue) App(nvue) H5 小程序
  • provide / inject
  • $slots
  • v-model / sync
  • $parent / $children

#设置页面背景颜色

一般情况下,我们给页面的page节点或者给页面的最外层view设置背景颜色,二者分别有如下需要注意点:

#1. 通过page节点设置

这个方式全端有效,但是需要注意的是,在微信小程序,或者某些安卓机型上,该节点如果写在带scoped属性的样式标签内是无效的,所以我们建议 您可以在页面多加一个不带scoped属性的样式标签,如下:

/* 如果需要css的支持,还可以添加lang属性 */
<style lang="scss">
page {
  background-color: $u-bg-color;
}
</style>
/* 带scoed属性的其他样式 */
<style lang="scss" scoped>
.box {
  ......
}
</style>

copy

#2. 通过页面外层view设置

相比page节点,view的高度默认为内容高度,所以如果页面内容不足一屏高度时,底部剩余部分依然为默认的白色,所以我们给需要这个view设置一个 最低高度,让它等于窗口高度:

<template>
  <view class="wrap">
    ......
  </view>
</template>
<style scoped lang="scss">
.wrap {
  background-color: $u-bg-color;
  min-height: 100vh;
}
</style>

copy

#全局赋值设备信息的陷阱

我们都知道,可以通过uni.getSystemInfoSync()获取设备信息,但是每次用到时都写一遍是很繁琐的,所以很多同学们都会突发奇想,比如在main.js或者 在App.vue中将uni.getSystemInfoSync()的结果赋值给Vue.prototype,如下:

// main.js
Vue.prototype.system = uni.getSystemInfoSync();

copy

上面的写法没有问题,我们可以任意地方通过this.system得到设备的信息,但是这里有一个陷阱,写在main.js,意味着赋值代码只会被执行一次,且是APP启动的时候, 但是uni-app中,设备信息的windowHeight属性是不含APP的导航栏和tabbar高度在内的,当我们进入首页时,windowHeight不含tabbar高度在内,高度可能为 '700px',但是进入内页后,没有tabbar,这时的windowHeight高度依然为700px(少掉了tabbar的50px高度),显然是不正确的。

上面说的只是对windowHeight属性有影响,其他的属性无碍,如果是需要获取高度,建议每次都执行uni.getSystemInfoSync(),或者通过uView提供的快捷工具 uni.$u.sys()方法获取即可。

#小程序主包太大无法预览和发布

我们都知道微信小程序预览和发布的主包大小都不能超过2M,否则无法真机预览和上传发布,经常有同学反馈刚使用uView,调试时候主包就超过了2M而无法真机预览, 我们在这里做一个说明,uView是按需引入的,在发行时,HX会自动剔除您没有使用组件,即使您使用了uViwe的全部组件,整个uView的大小也只有500K左右,但是有如下两点前提:

  • 调试
    在调试阶段,为了调试的友好效果和编译速度等,HX默认是没有对JS进行压缩和去除注释,也没有进行组件按需引入的,所以会导致JS文件都很大,我们需要在 HBuilder X进行如下操作,再重新编译即可:
HBuilderX   运行->运行到小程序模拟器->勾选 运行时是否压缩代码

copy

  • 发布
    在HX中进行发布时,uView的组件会按需引入(使用uView所有组件的情况下,占用空间500k左右),如果主包依然超出2M,您需要从多个方面着手:
  1. 小程序分包(opens new window)
  2. 将静态资源放到服务器进行引用
  3. 取消"ES6转ES5"设置

#uni.scss的优缺点

uni.scss为uni-app新建项目自带工程文件,使用的预处理器为sass/scss,由此可见,uni-app官方推荐的是scss,同时我们uView也是scss的坚定推崇者,不建议在 uni-app中使用lessstylus等。

uni.scss具有如下一些特点:

  • 无需引入,uni-app在编译时,会自动引入此文件
  • 在此中定义的scss变量,可以全局使用,可以在此定义一些颜色,主题,尺寸等变量
  • uni.scss会编译到每个scss文件中(请着重理解这一句话)

综上所述,我们可以得知,uni.scss主要是利用scss的特性,定义一些全局变量,供各个写了lang=scss的style标签引用,但是这引出了一个重要的问题:

uni.scss中所写的一切内容,都会注入到每个声明了scss的文件中,这意味着,如果您的uni.scss如果有几百行,大小10k左右,那么这个10k都会被注入所有的 其他scss文件(页面)中,如果您的应用有50个页面,那么有可能因此导致整体的包体积多了50 * 10 = 500k的大小,这可能会导致小程序包太大而无法预览和发布, 所以,我们建议您只将scss变量相关的内容放到uni.scss中。

#样式覆盖兼容性

为了避免样式被用户覆盖,或者被污染,一般组件或者页面都会给style标签加上scoped属性,如下演示为一个组件的内部构造:

/* item.vue */
<template>
  <view class="item"></view>
</template>
<style scoped>
  .item {
    border: 1px solid red;
  }
</style>

copy

我们在页面中引入上方的item组件,并且想修改它的border边框为颜色(blue),一般通过v-deep/deep/指令修改,如下写法:

<template>
  <item></item>
</template>
<style scoped>
::v-deep .item {
  border: 1px solid blue;
}
</style>

copy

上面的写法,在AppH5正常,但是在微信小程序无效,它要求::v-deep/deep/前面必须还要有父元素的类名存在,如下:

<template>
  <view class="wrap">
    <item></item>
  </view>
</template>
<style scoped>
.wrap ::v-deep .item {
  border: 1px solid blue;
}
</style>

copy

如果是在支付宝小程序中,写在组件上的类名和内联样式,都是无效的,如下:

<template>
  /* 在支付宝小程序,组件标签上的任何class和style都会被剔除,不会添加到组件内部的根元素中 */
  <item style="border: 1px solid blue" class="item"></item>
</template>
相关文章
|
SQL 运维 关系型数据库
在阿里云RDS(Relational Database Service)进行跨区域迁移
在阿里云RDS(Relational Database Service)进行跨区域迁移
351 2
|
人工智能 数据中心 芯片
液冷是大模型对算力需求的必然选择?|英伟达 GTC 2024六大亮点
在这个以高性能计算和大模型推动未来通用人工智能时代,算力已成为科技发展的隐形支柱。本文将重点探讨算力的演进,深入分析在不同领域中算力如何成为推动进步的基石;着眼于液冷如何突破算力瓶颈成为引领未来的先锋,对液冷散热的三种方式(冷板式、浸没式和喷淋式)做了详细的对比分析、成本测算和市场空间预测。并为您提供一份“实用教程”,指导如何将普通服务器改装为液冷服务器,以应对越来越复杂的计算需求。
|
11月前
|
C# Android开发 虚拟化
C# 一分钟浅谈:MAUI 跨平台移动应用开发
.NET MAUI 是 Microsoft 推出的跨平台框架,支持 Windows、macOS、iOS 和 Android。本文从基础概念入手,探讨 MAUI 的常见问题、易错点及解决方案,并通过代码示例详细说明。涵盖平台特定代码、XAML 语法、数据绑定、性能优化和调试技巧等内容,帮助开发者更好地掌握 .NET MAUI。
1002 55
|
编解码 前端开发 测试技术
这可能是市面上最好用的iOS云真机
最好用的iOS云真机,是怎么实现的呢?快来了解下吧!
3541 0
这可能是市面上最好用的iOS云真机
|
消息中间件 SQL 关系型数据库
Apache Hudi实时入湖之DeltaStreamer最佳实践
Apache Hudi实时入湖之DeltaStreamer最佳实践
265 0
|
监控 JavaScript
成功解决:[‘‘, ‘‘, __ob__: Observer]
这篇文章介绍了Vue框架中数组出现`__ob__: Observer`属性的原因和解决方法,说明了Vue如何通过观察者模式实现数据与视图的双向绑定,并提供了如何避免数组被Vue接管导致无法取值的解决方案。
成功解决:[‘‘, ‘‘, __ob__: Observer]
|
自然语言处理 搜索推荐 机器人
云上数字客服:重塑客户服务体验的智能化转型
技术成熟度:目前云上数字客服技术仍在不断发展和完善中,技术成熟度有待提高。 数据安全与隐私保护:随着客户数据的不断增加,如何确保数据的安全性和隐私性成为亟待解决的问题。 人机交互体验:虽然智能客服机器人已经取得了很大进展,但在某些复杂场景下仍难以完全替代人工客服,需要不断优化人机交互体验。 五、未来展望 随着技术的不断进步和市场环境的不断变化,云上数字客服将迎来更加广阔的发展前景。未来,云上数字客服将更加注重技术的创新和应用场景的拓展,不断提升服务质量和效率;同时加强数据安全和隐私保护,确保客户信息的安全性;此外还将积极探索与其他智能系统的融合应用,如智能营销、智能供应链等,为企业提供更全面的
951 7
|
算法 DataX C语言
【数据结构】二叉树的节点数,叶子数,第K层节点数,高度,查找x节点,判断是否为完全二叉树等方法【下】
六、二叉树叶子节点个数 1.代码: 2.测试结果: 七、二叉树第k层节点个数 1.代码: 2.测试结果: 八、二叉树查找值为x的节点 1.代码: 2.测试结果: 九、判断二叉树是否是完全二叉树 1.代码: 2.测试结果: 十、补充:队列代码 Queue.h Queue.c
|
JavaScript 前端开发 Go
理解 <script> 标签的 defer 和 async 属性
理解 <script> 标签的 defer 和 async 属性
296 3
|
Ubuntu
蓝易云 - ubuntu下自启动设置,为了开机自启动launch文件
完成以上步骤后,每次开机时,Ubuntu系统就会自动启动你指定的launch文件了。
366 0