README.md 4.0 KB
Newer Older
D
DCloud_LXH 已提交
1 2 3 4
# API概述

uni-app x项目的uts代码中可以使用很多API。包括:

W
wanganxp 已提交
5 6 7 8 9 10 11
1. uts的api,包括[内置对象](../uts/buildin-object-api/global.md),以及平台专有对象[UTSAndroid](../uts/utsandroid.md)[UTSiOS](../uts/utsios.md)
2. 全局api,前面不需要加`uni.`。如`getApp`
3. uni.xxx的内置api。见左侧
4. uniCloud.xxx的内置api [详见](./unicloud/README.md)
5. dom的api [详见](../dom/README.md)
6. vue的api [详见](../vue/README.md)
7. os原生api
D
DCloud_LXH 已提交
12
	
W
wanganxp 已提交
13 14
## os原生api的使用
由于uts可以直接调用Android和iOS的api,所以os和三方sdk的能力都可以在uts中调用。如下:
D
DCloud_LXH 已提交
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38

```vue
<script>
	import Build from 'android.os.Build';
	export default {
		onLoad() {
			console.log(Build.MODEL); //调用原生对象,返回手机型号
			console.log(uni.getSystemInfoSync().deviceModel); //调用uni API,返回手机型号。与上一行返回值相同
		}
	}
</script>
```

上面的示例,在页面启动时打印了2行日志,显示手机型号。

- uni.getSystemInfoSync,是uni的api
- import的Build,是Android os的api

可以看出,在uni-app x里,可以直接调用os的能力,不受限制,语法是uts的语法,但需要了解什么功能在原生里是哪个api。

使用`uni.getSystemInfoSync`则比较简单,看uni的文档即可,且可跨平台。

其实,[uni.getSystemInfoSync](https://gitcode.net/dcloud/uni-api/-/blob/master/uni_modules/uni-getSystemInfo/utssdk/app-android/index.uts) 的内部实现就是一个uts模块,底层使用了一样的代码,也是import了android.os.Build。

W
x  
wanganxp 已提交
39
大多数uni.的api,都是uts开发的,它们陆续开源在[uni-api](https://gitcode.net/dcloud/uni-api)
D
DCloud_LXH 已提交
40 41 42

插件市场也有很多做好的uts插件,方便开发者拿来即用。[uts插件](https://ext.dcloud.net.cn/?cat1=8&type=UpdatedDate)

W
wanganxp 已提交
43
虽然上述页面可以直接调用原生Android能力,但正规开发时,原生能力应封装为[uni_modules](https://uniapp.dcloud.net.cn/plugin/uni_modules.html)形式的[uts插件](https://uniapp.dcloud.net.cn/plugin/uts-plugin.html)。这样方便共享、方便跨平台。(iOS在js驱动模式时,uvue页面中不支持调用swift API,需封装为uts插件调用原生API)
D
DCloud_LXH 已提交
44

W
wanganxp 已提交
45
uni-app x 中不再支持plus和weex的API。过去plus api中一些常用的api,一部分在uni-app x中进行了替换增补、一部分提供了uts操作原生的示例代码。[详见](ext.md)
W
x  
wanganxp 已提交
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73

网上可以找到很多kotlin调用系统api的代码,但如何使用uts来调用这些系统api?

以上面的获取手机型号的代码为例:

1. 打开一个靠谱的ai,询问:"kotlin中获取手机型号的代码,需包含导入的类",得到如下代码:
```kotlin
import android.os.Build  
  
fun getDeviceModel(): String {  
    return Build.MODEL  
}
```

2. 再问ai:"把上述代码转为ts代码"
```ts
function getDeviceModel(): string {  
  return Build.MODEL;  
}
```

这里注意几个差别:
- kotlin中import包,是`import android.os.Build`,而uts是`	import Build from 'android.os.Build'`。import后面需要跟名字,from后面需要引号括起来。
- import包,需要在uvue页面的`export default`外。复杂的原生插件应该直接创建uts插件,放在单独的uni_modules中。
- kotlin定义一个函数是`fun`,而uts是`function`
- kotlin中定义一个常量是val,而uts是const;kotlin的变量定义是var,而uts推荐使用let。

更复杂的例子可以[参考](ext.md#kt2uts)
W
wanganxp 已提交
74 75 76 77 78 79 80 81 82 83

## 生命周期@liftcycle

生命周期是一种特殊事件,对于应用、页面、组件,uni-app x提供了一批对应的生命周期,比如应用的onLaunch、页面的onLoad、组件的created。

- 应用生命周期:[详见](../collocation/app.md#applifecycle)
- 页面生命周期:[详见](../page.md#lifecycle)
- 组件生命周期:[详见](../vue/component.md#component-lifecycle)

除了生命周期,uni还提供了一批其他on/off事件监听API,比如uni.onPushMessage()、uni.offPushMessage()。这些不属于生命周期。