未验证 提交 4d25e165 编写于 作者: O openharmony_ci 提交者: Gitee

!8343 新增FAQ

Merge pull request !8343 from zengyawen/master
......@@ -349,4 +349,6 @@ zh-cn/application-dev/napi/napi-guidelines.md @RayShih
zh-cn/application-dev/napi/drawing-guidelines.md @ge-yafang
zh-cn/application-dev/napi/rawfile-guidelines.md @HelloCrease
zh-cn/application-dev/reference/apis/js-apis-buffer.md @zengyawen
zh-cn/application-dev/reference/js-service-widget-ui @HelloCrease
\ No newline at end of file
zh-cn/application-dev/reference/js-service-widget-ui @HelloCrease
zh-cn/application-dev/faqs/ @zengyawen
\ No newline at end of file
# 常见问题
- [Ability框架开发常见问题](faqs-ability.md)
- [UI框架(JS)开发常见问题](faqs-ui-js.md)
- [UI框架(eTS)开发常见问题](faqs-ui-ets.md)
- [图形图像开发常见问题](faqs-graphics.md)
- [文件管理开发常见问题](faqs-file-management.md)
- [网络与连接开发常见问题](faqs-connectivity.md)
- [数据管理开发常见问题](faqs-data-management.md)
- [设备管理开发常见问题](faqs-device-management.md)
- [Native API使用常见问题](faqs-native.md)
- [三四方库使用常见问题](faqs-third-party-library.md)
- [IDE使用常见问题](faqs-ide.md)
- [hdc_std命令使用常见问题](faqs-hdc-std.md)
- [开发板](faqs-development-board.md)
# Ability框架开发常见问题
## Stage模型中是否有类似FA模型的DataAbility的开发指导文档
适用于:OpenHarmony SDK 3.2.3.5版本, API9 Stage模型
Stage模型中DataShareExtensionAbility提供了向其他应用共享以及管理其数据的方法。
参考文档:[数据共享开发指导](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/database/database-datashare-guidelines.md)
## 拉起Ability为什么在界面上没反应?
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
1. 如果是通过startAbility的方式拉起,检查want中abilityName字段是否携带了bundleName做前缀,如果有,请删除;
2. 检查MainAbility.ts文件中onWindowStageCreate方法配置的Ability首页文件是否在main_pages.json中有定义,如果没有定义,请补齐;
3. SDK和OpenHarmony SDK系统推荐同一天的版本。
参考文档:[OpenHarmony版本转测试信息](https://gitee.com/openharmony-sig/oh-inner-release-management/blob/master/Release-Testing-Version.md)
## 调用方法的时候,如何解决方法内部的this变成undefined?
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
方式一:在调用方法的时候加上.bind(this);
方式二:使用箭头函数。
## 如何解决must have required property 'startWindowIcon'报错
适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型
Ability配置中缺少startWindowIcon属性配置,需要在module.json5中abilities中配置startWindowIcon。
参考文档:[Stage模型配置文件](https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/quick-start/stage-structure.md/)
示例:
```
{
"module": {
// do something
"abilities": [{
// do something
"startWindowIcon": "$media:space",
"startWindowBackground": "$color:white",
}]
}
}
```
## 如何获取设备横竖屏的状态变化的通知
适用于:OpenHarmony SDK 3.2.3.5版本, API9 Stage模型
使用Ability的onConfigurationUpdated回调实现,系统语言、颜色模式以及Display相关的参数,比如方向、Density,发生变化时触发该回调。
参考文档:[Ability开发指导](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/ability/stage-ability.md)
# 网络与连接开发常见问题
## Post请求时,extraData支持哪几种的数据格式?
适用于:OpenHarmony SDK 3.2.2.5版本, API9 Stage模型
extraData代表发送请求的额外数据,支持如下数据:
1. 当HTTP请求为POST、PUT方法时,此字段为HTTP请求的content。
2. 当HTTP请求为GET、OPTIONS、DELETE、TRACE、CONNECT方法时,此字段为HTTP请求的参数补充,参数内容会拼接到URL中进行发送。
3. 开发者传入string对象,开发者需要自行编码,将编码后的string传入。
## 如何理解http请求的错误码28?
适用于:OpenHarmony SDK 3.2.2.5版本,API9 Stage模型
错误码28代表CURLE_OPERATION_TIMEDOUT 。网络请求底层使用libcurl库,更多错误码可以查看相应文档。
参考文档:[开发指南](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-http.md#response%E5%B8%B8%E7%94%A8%E9%94%99%E8%AF%AF%E7%A0%81)[Curl错误码](https://curl.se/libcurl/c/libcurl-errors.html)
## \@ohos.net.http.d.ts的response错误码返回6是什么意思?
适用于:OpenHarmony SDK 3.2.3.5版本
6表示地址无法解析主机,可以尝试ping一下request中的url,确认是否可以ping通。
更多错误码参考[Response常用错误码](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-http.md#response%E5%B8%B8%E7%94%A8%E9%94%99%E8%AF%AF%E7%A0%81)或者[Curl错误码](https://curl.se/libcurl/c/libcurl-errors.html)
# 数据管理开发常见问题
## 如何将PixelMap的数据存储到数据库中。
适用于:OpenHarmony SDK 3.2.3.5版本
PixelMap应该被转换成相应的ArrayBuffer再放进数据库。
参考文档:[readPixelsToBuffer](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-image.md#readpixelstobuffer7-1)
## 如何获取rdb关系型数据库文件
适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型
开发者可使用hdc_std命令拷贝文件,其中文件路径为: /data/app/el2/100/database/包名/entry/db/ ,然后拷贝该路径下后缀为 .db、.db-shm、.db-wal的文件,拷贝完成后,可以通过SQLite工具打开该数据库文件。
示例:
```
hdc_std file recv /data/app/el2/100/database/com.xxxx.xxxx/entry/db/test.db ./test.db
```
# 开发板
## 如何获取开发板上截屏图片?
适用于:OpenHarmony SDK 3.2.2.5版本,API9 Stage模型
- 方法一:点击开发板下拉控制中心的截屏按钮,截屏图片通过相册可以查看。
- 方法二:通过截屏脚本一键截屏,可以在电脑上查看。操作方法:Windows上连接开发板,然后电脑上新建文本文件,拷贝如下脚本内容,文件名后缀改为.bat文件(需要提前配置好hdc的环境变量),点击运行后,截屏图片与脚本在同一目录。
示例:
```
set filepath=/data/%date:~0,4%%date:~5,2%%date:~8,2%%time:~1,1%%time:~3,2%%time:~6,2%.png
echo %filepath%
: pause
hdc_std shell snapshot_display -f %filepath%
: pause
hdc_std file recv %filepath% .
: pause
```
## RK3568板子和previewer上展示的效果差异较大,如何把previewer的尺寸调整成实际板子一样。
适用于:IDE 3.0.0.991
1. 给预览器新建Profile
![zh-cn_image_0000001361254285](figures/zh-cn_image_0000001361254285.png)
2. 新建Profile的具体参数可参考如下配置:
Device type : default
Resolution: 720\*1280
DPI: 240
## 开发板安装驱动后设备仍然无法识别,设备管理器错误识别为其他设备:FT232R USB UART ()
可能原因:开发版的USB串口驱动没有安装。
解决办法:搜索FT232R USB UART确定,下载安装驱动即可。
## 在开发板上登录需要认证网络如何进行认证
适用于:OpenHarmony SDK 3.2.2.5版本
连接需要认证的网络后,用浏览器打开任意网址就可以进入认证页面。
如果开发板上没有浏览器,可以安装[浏览器Sample应用](https://gitee.com/openharmony/app_samples/tree/master/device/Browser)
# 设备管理开发常见问题
## 如何获取设备的dpi值
适用于:OpenHarmony SDK 3.2.2.5版本,API9 Stage模型
导入@ohos.display包,通过getDefaultDisplay方法获取。
示例:
```
import display from '@ohos.display';
display.getDefaultDisplay((err, data) => {
if (err.code) {
console.error('Test Failed to obtain the default display object. Code: ' + JSON.stringify(err));
return;
}
console.info('Test Succeeded in obtaining the default display object. Data:' + JSON.stringify(data));
console.info('Test densityDPI:' + JSON.stringify(data.densityDPI));
});https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-device-info.md)
```
# 文件管理开发常见问题
## 调用媒体库getAlbums方法,没有收到返回,也没有捕获到异常是为什么
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
getAlbums方法需要权限:ohos.permission.READ_MEDIA,从[OpenHarmony权限定义列表](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/permission-list.md)查询知道ohos.permission.READ_MEDIA权限是需要用户授权。
1. 在module.json5中配置权限:
```
"requestPermissions": [
{
"name": "ohos.permission.READ_MEDIA"
}
]
```
2. 在MainAbility.ts -> onWindowStageCreate页面加载前需要增加用户授权代码:
```
private requestPermissions() {
let permissionList: Array<string> = [
"ohos.permission.READ_MEDIA"
];
this.context.requestPermissionsFromUser(permissionList)
.then(data => {
console.info(`request permission data result = ${data.authResults}`)
})
.catch(err => {
console.error(`fail to request permission error:${err}`)
})
}
```
# 图形图像开发常见问题
## 调用window实例的setSystemBarProperties接口时,设置isStatusBarLightIcon和isNavigationBarLightIcon属性不生效
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
状态栏字体高亮属性的本质就只是让字体变成白色。调用window实例的setSystemBarProperties接口时,如果设置了状态栏内容颜色statusBarContentColor,就以开发者设置的颜色为准,isStatusBarLightIcon状态栏字体高亮属性就不生效;同理,如果设置了导航栏内容颜色navigationBarContentColor,isNavigationBarLightIcon导航栏字体高亮属性就不生效。
## 如何设置系统状态栏样式
适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型
导入\@ohos.window模块,开发者可以使用window.setSystemBarProperties()接口设置状态栏样式属性,达到自定义样式的效果。
# hdc_std命令使用常见问题
## 日志的常用命令
适用于:OpenHarmony SDK 3.2.2.5版本
清理日志:hdc_std shell hilog -r
调大缓存到20M:hdc_std shell hilog -G 20M
抓取日志:hdc_std shell hilog &gt; log.txt
## 日志限流怎么规避
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
- 关闭日志限流 hdc_std shell hilog -Q pidoff
- 关闭隐私标志 hdc_std shell hilog -p off
- 增加日志buffer hdc_std shell hilog -G 200M
- 关闭全局日志,只打开自己领域的日志 hdc_std shell hilog –b D –D 0xd0xxxxx
执行完命令后重启DevEco Studio。
## 应用如何打印日志是使用hilog还是console,hilog接口参数domain的设置范围是什么?
适用于:OpenHarmony SDK 3.2.2.5版本
推荐使用[hilog日志系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-hilog.md)进行日志打印,接口参数domain的设置范围可以参考[开发指南](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-hilog.md#hilogisloggable)
## hilog日志打印长度限制是多少,是否可以配置
适用于:OpenHarmony SDK 3.2.2.5版本
日志打印的长度限制为1024,该长度不能配置。
## 为什么有时候直接用IDE安装HAP包到开发板上无法打开?
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
请检查sdk和开发板烧录的系统版本是否一致,推荐取同一天的sdk和系统版本。
## 如何通过hdc命令上传文件
适用于:OpenHarmony SDK 3.2.2.5版本
可以使用hdc_std file send上传文件。
## 如何让RK3568开发板不熄屏?
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
输入命令hdc_std shell "power-shell setmode 602"
## 如何通过命令启动Ability?
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
输入命令hdc_std shell aa start -a AbilityName -b bundleName -m moduleName
# IDE使用常见问题
## 如何解决报错“npm ERR! code SELF_SIGNED_CERT_IN_CHAIN”?
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
1. 在Dev Eco Studio terminal中执行npm config set strict-ssl=false;
2. 在Dev Eco Studio terminal中执行npm install。
## 手工更新DevEco的SDK后,编译HAP报错“Cannot find module 'xxx\ets\x.x.x.x\build-tools\ets-loader\node_modules\webpack\bin\webpack.js'”
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
1. 到SDK的ets\x.x.x.x\build-tools\ets-loader目录下执行npm install;
2. 到SDK的js\x.x.x.x\build-tools\ace-loader目录下执行npm install。 完成步骤后重新编辑既可。
# Native API使用常见问题
## 运行Native HAP的时候,导入的命名空间报错Obj is not a valid object
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
检查模块根目录(注意不是工程根目录)下的build-profile.json5文件,如果设备是32位,需要在abiFilters参数中配置armeabi-v7a,如果设备是64位,需要在abiFilters参数中配置arm64-v8a。
## NAPI开发的C++代码中,如何获取到模块 package.json 文件中的 “version” 值?
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
1. 在编译工具Hvigor脚本文件hvigorfile.js中,通过subModule.getPackageJsonPath方法获取module中package.json文件位置;
2. 使用nodejs能力读取package.json文件中version字段,写入build-profile.json5文件buildOption.cppFlags字段;
示例:
```
// module hvigorfile.js
const subModule = require('@ohos/hvigor')(__filename)
const fs = require("fs-extra")
const path = require("path")
const packageJsonPath = subModule.getPackageJsonPath()
const buildProfilePath = path.resolve(packageJsonPath, '../build-profile.json5')
const packageJsonData = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'))
let buildProfileData = fs.readFileSync(buildProfilePath, 'utf8')
buildProfileData = buildProfileData.replace(/\"cppFlags\"\:(.*)\,/, `"cppFlags": "-D NWEBEX_VERSION=${packageJsonData.version}",`)
fs.writeFileSync(buildProfilePath, buildProfileData, 'utf8')
const ohosPlugin = require('@ohos/hvigor-ohos-plugin').hapTasks(subModule) // 该插件执行了C++编译任务,读取了build-profile.json5文件
module.exports = {
ohos: ohosPlugin
}
```
```
// hellp.cpp 读取
#define _NWEBEX_VERSION(v) #v
#define _NWEBEX_VER2STR(v) _NWEBEX_VERSION(v)
static napi_value Add(napi_env env, napi_callback_info info)
{
napi_value fixed_version_value = nullptr;
napi_create_string_utf8(env, _NWEBEX_VER2STR(NWEBEX_VERSION), NAPI_AUTO_LENGTH, &fixed_version_value);
return fixed_version_value;
}
```
# 三四方库使用常见问题
## 报错“Stage model module … does not support including OpenHarmony npm packages or modules in FA model. OpenHarmony build tasks will not be executed, and OpenHarmony resources will not be packed. ”是什么意思?
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
三四方件未适配API9 Stage模型,无法使用。
# UI框架(eTS)开发常见问题
## TS语言在生成器函数中编译失败,有哪些使用限制?
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
TS语言的使用在生成器函数中存在以下限制:
- 表达式仅允许在字符串(${expression})、if条件、ForEach的参数和组件的参数中使用;
- 这些表达式中的任何一个都不能导致任何应用程序状态变量(\@State、\@Link、\@Prop)的改变,否则会导致未定义和潜在不稳定的框架行为;
- 生成器函数内部不能有局部变量。
上述限制都不适用于事件处理函数(例如onClick)的匿名函数实现。
错误示例:
```
build() {
let a: number = 1 // invalid: variable declaration not allowed
Column() {
Text('Hello ${this.myName.toUpperCase()}') // ok.
ForEach(this.arr.reverse(), ..., ...) // invalid: Array.reverse modifies the @State array varible in place
}
buildSpecial() // invalid: no function calls
Text(this.calcTextValue()) // this function call is ok.
}
```
## 在Stage模型下,如何通过router实现页面跳转
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
1. 对于通过页面路由router实现页面跳转,首先要在main_pages.json配置文件中将所有跳转的页面加入pages列表;
2. 页面路由需要在页面渲染完成之后才能调用,在onInit和onReady生命周期中页面还处于渲染阶段,禁止调用页面路由方法。
## router通过调用push方法进堆栈的page是否会被回收
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
调用push进入堆栈的page不回收,调用back方法出栈后可以被回收。
## 如何动态替换掉资源文件中的“%s”占位符
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
在应用中,通过"$r('app.string.xx')"的形式引用应用资源,$r的第二个参数可用于替换%s占位符。
示例:
```
build() {
//do something
//引用的string资源,$r的第二个参数用于替换%s
Text($r('app.string.entry_desc','aaa'))
.fontSize(100)
.fontColor(Color.Black)
//do something
}
```
## 如何读取Resource中的xml文件并转化为String类型
适用于:OpenHarmony SDK 3.2.2.5版本, API9 Stage模型
1. 通过resourceManager的RawFile接口获取Uint8Array格式数据。
2. 通过String.fromCharCode将Uint8Array格式数据转化为String类型。
参考文档:[资源管理](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-resource-manager.md)
示例:
```
resourceManager.getRawFile(path, (error, value) => {
if (error != null) {
console.log("error is " + error);
} else {
let rawFile = value;
let xml = String.fromCharCode.apply(null, rawFile)
}
});
```
## 如何将Resource资源对象转成string类型
适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型
通过\@ohos.resourceManager模块 resourceManager.getString()方法获取字符串。
参考文档:[资源管理](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-resource-manager.md#getstring)
## class全局静态变量无法使用的问题
适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型
Page和Ability打包后会对import的对象分别形成两个不同的闭包,即打包出两个Global对象。因此,所引用的静态变量并不是同一对象,所以无法通过class静态变量方式定义全局变量。建议使用AppStorage进行全局变量管理。
参考文档:[应用程序的数据存储](https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/ui/ts-application-states-appstorage.md/)
## Stage模型下如何获取资源
适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型
Stage模型支持了通过context获取resourceManager对象的方式,再调用其内部获取资源的接口,无需再导入包,此方式FA模型不适用。
示例:
```
const context = getContext(this) as any
context
.resourceManager
.getString($r('app.string.entry_desc').id)
.then(value => {
this.message = value.toString()
})
```
## 如何将容器定位到屏幕的最底部?
适用于:OpenHarmony SDK 3.2.3.5版本, API9 Stage模型
可以使用Stack堆叠容器,设置子组件在容器内的最底部。
示例:
```
build() {
Stack({alignContent : Alignment.Bottom}) {
//容器位于最底部
Stack() {
Column()
.width('100%')
.height('100%')
.backgroundColor(Color.Yellow)
}
.width('100%')
.height('10%')
}
.width('100%')
.height('100%')
.backgroundColor('rgba(255,255,255, 0)')
}
```
## CustomDialog是否支持在TS文件中使用?
适用于:OpenHarmony SDK 3.2.2.5版本,API9 Stage模型
不支持,CustomDialog当前只支持在eTS的Page中使用。
参考文档:[自定义弹窗](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-methods-custom-dialog-box.md)
## 如何将CustomDialog中的变量传递给Page页面中的变量?
适用于:OpenHarmony SDK 3.2.2.5版本,API9 Stage模型
利用自定义的回调函数,当点击弹窗的confirm按钮时,将data数据从自定义弹窗组件中传递给当前的page的页面。
示例:
```
// CustomDialog 组件
@CustomDialog
struct MyDialog {
controller: CustomDialogController
title: string
data: string
cancel: () => void
confirm: (data: string) => void
Button('confirm')
.onClick(() => {
this.controller.close()
this.data = 'test'
this.confirm(this.data)
}).backgroundColor(0xffffff).fontColor(Color.Red)
// Page页面
@Entry
@Component
struct DialogTest {
dialogController: CustomDialogController = new CustomDialogController({
builder: MyDialog({ title:'标题自定义',cancel: this.onCancel,
confirm: this.onAccept.bind(this) }), // 绑定自定义的回调函数
cancel: this.existApp,
autoCancel: true
})
onAccept(data:string) {
console.info('Callback when the second button is clicked ' + data)
}
}
```
## List组件上添加了Text组件后,List组件无法拖动到底部
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
在List的父容器加上代码layoutWeight(1)。原理:List属于可滚动容器组件,默认高度是占满全屏幕高度,当出现其他固定高度的组件占领了屏幕的部分高度时,需要开发人员显性的指定List组件占满剩余高度,而不是全屏幕高度。
## 栅格布局子组件如何居中?
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
GridContainer内子组件默认水平左对齐,居中显示可以参考以下处理方式:
内部嵌套布局组件Row,设置Row属性justifyContent(FlexAlign.Center),内部嵌套子组件可保持居中显示,参考[栅格布局](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/ui/ui-ts-layout-grid-container.md)文档。
示例:
```
GridContainer({ sizeType: SizeType.SM, columns: 12 }) {
Row() {
Text('1')
.useSizeType({
sm: { span: 4, offset: 0 },
})
.backgroundColor(0x46F2B4)
}.justifyContent(FlexAlign.Center) // 该属性设置使子组件居中显示
}
```
## 如何获取状态栏和导航栏高度?
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
在加载窗口内容之前,采用systemAvoidAreaChange事件监听。
示例:
```
// MainAbility.ts
import window from '@ohos.window';
/**
* 设置沉浸式窗口,并获取状态栏和导航栏高度
* @param mainWindow 主窗口对象
*/
async function enterImmersion(mainWindow: window.Window) {
mainWindow.on("systemAvoidAreaChange", (area: window.AvoidArea) => {
AppStorage.SetOrCreate<number>("topHeight", area.topRect.height);
AppStorage.SetOrCreate<number>("bottomHeight", area.bottomRect.height);
})
await mainWindow.setFullScreen(true)
await mainWindow.setSystemBarEnable(["status", "navigation"])
await mainWindow.setSystemBarProperties({
navigationBarColor: "#00000000",
statusBarColor: "#00000000",
navigationBarContentColor: "#FF0000",
statusBarContentColor: "#FF0000"
})
}
export default class MainAbility extends Ability {
// do something
async onWindowStageCreate(windowStage: window.WindowStage) {
let mainWindow = await windowStage.getMainWindow()
await enterImmersion(mainWindow)
windowStage.loadContent('pages/index')
}
// do something
}
```
## 如何在eTS代码中执行Web组件内的JS函数?
适用于:OpenHarmony SDK 3.2.3.5版本, API9 Stage模型
通过WebController中runJavaScript方法异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。注意:runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。
参考文档:[Web](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-web.md)
## 在容器组件嵌套的场景下,如何解决手势拖拽事件出现错乱的问题?
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
gesture的属性distance默认值是5,把gesture的属性distance设成1就可以解决。
# UI框架(JS)开发常见问题
## 如何取出xml文件中对应的字段
适用于:OpenHarmony SDK 3.2.3.5版本, API9 Stage模型
convertxml中convert方法提供了转换xml文本为JavaScript对象的能力。
示例:
```
import convertxml from '@ohos.convertxml';
// 代码片段
xml =
'<?xml version="1.0" encoding="utf-8"?>' +
'<note importance="high" logged="true">' +
' <title>Happy</title>' +
' <todo>Work</todo>' +
' <todo>Play</todo>' +
'</note>';
let conv = new convertxml.ConvertXML();
// 转换选项, 参考文档使用
let options = {trim : false, declarationKey:"_declaration",
instructionKey : "_instruction", attributesKey : "_attributes",
textKey : "_text", cdataKey:"_cdata", doctypeKey : "_doctype",
commentKey : "_comment", parentKey : "_parent", typeKey : "_type",
nameKey : "_name", elementsKey : "_elements"}
let result:any = conv.convert(xml, options) // 将xml文本转为JS对象
console.log('Test: ' + JSON.stringify(result))
console.log('Test: ' + result._declaration._attributes.version) // xml代码片段version字段信息
console.log('Test: ' + result._elements[0]._elements[0]._elements[0]._text) // xml代码片段title字段内容
```
参考文档:[xml转换JavaScript](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-convertxml.md)
## JS、TS和eTS的区别
适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型
- JS:Web 的编程语言。具有轻量级,弱类型等特点。
- TS:TS是JS的超集,拓展了JS的语法。有明确的类型与更多面向对象的内容如接口,枚举等。
- eTS:OpenHarmony UI开发框架语言,是对TS的扩展,通过声明式开发范式实现UI界面。
## 如何将时间转为时分秒格式
示例:
```
export default class DateTimeUtil{
/**
* 时分秒
*/
getTime() {
const DATETIME = new Date()
return this.concatTime(DATETIME.getHours(),DATETIME.getMinutes(),DATETIME.getSeconds())
}
/**
* 年月日
*/
getDate() {
const DATETIME = new Date()
return this.concatDate(DATETIME.getFullYear(),DATETIME.getMonth()+1,DATETIME.getDate())
}
/**
* 日期不足两位补充0
* @param value-数据值
*/
fill(value:number) {
return (value> 9 ? '' : '0') + value
}
/**
* 年月日格式修饰
* @param year
* @param month
* @param date
*/
concatDate(year: number, month: number, date: number){
return `${year}${this.fill(month)}${this.fill(date)}`
}
/**
* 时分秒格式修饰
* @param hours
* @param minutes
* @param seconds
*/
concatTime(hours:number,minutes:number,seconds:number){
return `${this.fill(hours)}${this.fill(minutes)}${this.fill(seconds)}`
}
}
```
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册