支付宝小程序acss语法参考、getApp方法、小程序tabbar、titleBar多语言配置

668 阅读7分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第10天,点击查看活动详情

acss语法参考

ACSS 是一套样式语言,用于描述 AXML 的组件样式,决定 AXML 的组件的显示效果。

为适应广大前端开发者,ACSS 和 CSS 规则完全一致,100% 可以用。同时为更适合开发小程序,对 CSS 进行了扩充,ACSS 支持 px,rpx,vh,vw 等单位。

ACSS 已经帮开发者做了不同手机端的样式兼容性处理

rpx

rpx(responsive pixel)可以根据屏幕宽度进行自适应,规定屏幕宽为 750rpx。以 Apple iPhone6 为例,屏幕宽度为 375px,共有 750 个物理像素,则 750 rpx = 375 px = 750 物理像素,1rpx = 0.5 px = 1 物理像素。

image.png

样式导入

使用 @import 语句可以导入外联样式表,@import 后需要加上外联样式表相对路径,用; 表示结束

image.png
导入路径支持从 node_modules 目录载入第三方模块,例如 page.acss。

image.png

内联样式

组件上支持使用style、class属性来控制样式

style属性

用于接收动态样式,样式在运行时会进行解析,行内样式不支持!import优先级规则

image.png

class属性

用于接收静态样式,属性值是样式规则中类选择器名(样式类名)的集合,样式类名不需要带上.,多个类名间以空格分隔。请静态样式写进class中,避免将静态样式写进style中,以免影响渲染速度。

image.png

选择器

同css3保持一致

注意
  • .a-,.am-开头的类选择器为系统组件占用,不可以使用
  • 不支持属性选择器

全局样式与局部样式

  • app.acss 中的样式为全局样式,作用于每一个页面。
  • 页面文件夹内的 .acss 文件中定义的样式为局部样式,只作用在对应的页面,并会覆盖 app.acss 中相同的选择器

本地资源引用

ACSS 文件里的本地资源引用请使用绝对路径的方式,不支持相对路径引用,例如下方示例。

image.png

Q:设置页面高度 100% 为什么没用?

A:设置 100%,需要依赖父容器的高度,父容器没有高度那么 100% 就是 0。或者添加绝对定位也可解决,如不添加,会自适应页面的内容。

app.js注册小程序

App(object: Object)

App() 用于注册小程序,接受一个 Object 作为属性,用来配置小程序的生命周期等。App() 必须在 app.js 中调用,必须调用且只能调用一次。

image.png

前台/后台定义:
  • 一般情况下,小程序用户点击右上角关闭,或者按下设备Home键离开支付宝时,小程序并不会直接销毁,而是进入后台
  • 当用户再次进入支付宝或再次打开小程序时,小程序会从后台进入前台
  • 只有当小程序进入后台5分钟后,或占用系统资源过高,才会被真正销毁
  • 小程序是否销毁、是否进入后台,也与小程序自身业务逻辑、当前内存资源占用有关

image.png

  • 小程序首次启动时,onLaunch 方法可获取 querypath 等属性值。
  • 小程序处于后台时,如果从 scheme、扫二维码打开,需要在 onShow 方法中获取 querypath 等属性值。

image.png

image.png 注意

  • 不要在 onShow() 中进行 my.redirectTomy.navigateTo 等操作页面栈的行为
  • 不要在 onLaunch() 里调用 getCurrentPages 方法,因为此时 page 还未生成。
  • app.json 应用配置 behaivor 支持配置项 decodeQuery,当设置为 disable 后,不会再对键值额外再做 decodeComponent

onHide()

小程序从前台进入后台时触发 onHide()

image.png

onError(error, stack)

小程序应用发生脚本错误时触发。事件也可以通过 [my.onError] 进行监听。其参数列表如下:

image.png

image.png

onShareAppMessage(object: Object)

全局分享配置。当页面未设置 page.onShareAppMessage 时,调用分享会执行全局的分享设置 在 Page 中定义 onShareAppMessage 函数,设置该页面的分享信息。

开发者可通过传入参数自定义小程序分享内容(例如:标题、描述、图片),用户通过点击或者复制分享的内容可以快速打开小程序,进入指定页面。目前支持的分享渠道有:支付宝朋友动态、支付宝好友、钉钉、新浪微博、微信、QQ。

  • 每个 Page 页面的右上角菜单中默认有 分享 按钮;onShareAppMessage 函数只自定义分享的内容,不影响分享功能。
  • 用户点击分享按钮的时候会调用。
  • 此事件需要返回一个对象(Object)类型,用于自定义分享内容。
  • 分享图片中的二维码的有效期为 60 天,若需要长期有效的二维码,请登录 [开放平台控制台] > 我的应用 > 进入小程序应用详情页 > 小程序码 中生成。
  • 小程序在 1.1.0+ 版本中开始支持 open-type 为 share 的按钮触发分享。
  • 从基础库 [1.24.13]、[2.6.7]版本开始支持 async 写法,可通过 my.canIUse('page.onShareAppMessage.async') 检测是否支持。

应用场景

用户点击右上角的选项按钮可以分享小程序,用户点击分享后出现若干分享的选项。
示例代码:
右上角触发分享示例代码: image.png

image.png
按钮触发分享方式示例代码:

image.png

image.png
参数

image.png
返回值
onShareAppMessage执行后必须返回一个分享对象,用于自定义分享内容

image.png

image.png

onUnhandledRejection(object: Object)

Promisereject 且没有 reject 处理器时触发。也可使用 [my.onUnhandledRejection] 绑定监听。
参数和注意事项与 [my.onUnhandledRejection] 一致。

image.png

onPageNotFound(object: Object)

小程序要打开的页面不存在时触发。也可以使用 [my.onPageNotFound]绑定监听。
参数和注意事项与 my.onPageNotFound 一致。
示例代码:

image.png

globalData 全局数据

App() 中可以设置全局数据 globalData
示例代码:

image.png

更多

开发者可以添加任意的函数或数据变量到 Object 参数中,用 this 可以访问。

也可在 app.js 引入其他的公共方法,将方法挂载到 app.js 下。

示例代码:

image.png

image.png

常见问题

Q:可以在 app.js 中关闭小程序吗?

A:不可以,关闭小程序的方法仅支持小程序页面点击右上角的关闭按钮。

getApp方法

小程序提供了全局的 getApp() 方法,可获取当前小程序实例,一般用于在子页面中获取顶层应用。
在全局App方法里面定义globalData,然后在子页面可以通过调用getApp方法来获取全局App方法里的globalData。
示例代码: image.png

image.png 注意:

  • App() 函数中不可以调用 getApp(),可使用 this 获取当前小程序实例。
  • 通过 getApp() 获取实例后,请勿调用生命周期回调函数。
  • 请区分全局变量及页面局部变量,比如: image.png
    a.jsb.js 两个文件中都声明了变量 localValue,但并不会互相影响,因为各个文件声明的局部变量和函数只在当前文件下有效。

小程序tabbar、titleBar多语言配置

使用 tabBar、titleBar 多语言配置后,小程序会根据当前手机的语言来读取显示该语言配置。
多语言 tabBar、titleBar 配置如下:

  1. 语言配置统一放到根目录下的 locale 目录下。
  2. 每个语言一个目录,如 zh-Hans(简体中文)、zh-HK (繁体中文香港)。
  3. 在每个语言目录下,通过添加 app.json 配置,配置该语言下的 titleBar 与 tabBar。
    注意:
  • 目前仅支持 zh-Hans(简体中文)、zh-Hant(繁体中文台湾)、zh-HK(繁体中文香港)、en(英文)四种语言。
  • IDE 中请使用 真机调试 查看配置效果。
    文件目录结构示例如下:

image.png

tabBar示例代码

locale 目录中的 app.json 配置示例如下,items 中只需配置 name 属性的值即可。

image.png
根目录下的app.json中items中不配置name属性

image.png
属性

image.png