当前位置:   article > 正文

OpenHarmony开发语言常见问题指南_openharmony 头文件 inline 未定义

openharmony 头文件 inline 未定义

开发语言常见问题

TS语言在生成器函数中编译失败,有哪些使用限制?

适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型

TS语言的使用在生成器函数中存在以下限制:

  • 表达式仅允许在字符串(${expression})、if条件、ForEach的参数和组件的参数中使用;
  • 这些表达式中的任何一个都不能导致任何应用程序状态变量(@State、@Link、@Prop)的改变,否则会导致未定义和潜在不稳定的框架行为;
  • 生成器函数内部不能有局部变量。

上述限制都不适用于事件处理函数(例如onClick)的匿名函数实现。

错误示例:

  1. build() {
  2. let a: number = 1 // invalid: variable declaration not allowed
  3. Column() {
  4. Text('Hello ${this.myName.toUpperCase()}') // ok.
  5. ForEach(this.arr.reverse(), ..., ...) // invalid: Array.reverse modifies the @State array variable in place
  6. }
  7. buildSpecial() // invalid: no function calls
  8. Text(this.calcTextValue()) // this function call is ok.
  9. }

如何动态替换掉资源文件中的“%s”占位符

适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型

在应用中,通过"$r('app.string.xx')"的形式引用应用资源,$r的第二个参数可用于替换%s占位符。

示例:

  1. build() {
  2. //do something
  3. //引用的string资源,$r的第二个参数用于替换%s
  4. Text($r('app.string.entry_desc','aaa'))
  5. .fontSize(100)
  6. .fontColor(Color.Black)
  7. //do something
  8. }

如何读取Resource中的xml文件并转化为String类型

适用于:OpenHarmony SDK 3.2.2.5版本, API9 Stage模型

  1. 通过resourceManager的RawFile接口获取Uint8Array格式数据。
  2. 通过String.fromCharCode将Uint8Array格式数据转化为String类型。快快快

 

示例:

  1. resourceManager.getRawFile(path, (error, value) => {
  2. if (error != null) {
  3. console.log("error is " + error);
  4. } else {
  5. let rawFile = value;
  6. let xml = String.fromCharCode.apply(null, rawFile)
  7. }
  8. });

如何将Resource资源对象转成string类型

适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型

通过@ohos.resourceManager模块 resourceManager.getString()方法获取字符串。

 

class全局静态变量无法使用的问题

适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型

Page和Ability打包后会对import的对象分别形成两个不同的闭包,即打包出两个Global对象。因此,所引用的静态变量并不是同一对象,所以无法通过class静态变量方式定义全局变量。建议使用AppStorage进行全局变量管理。

 

Stage模型下如何获取资源

适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型

Stage模型支持了通过context获取resourceManager对象的方式,再调用其内部获取资源的接口,无需再导入包,此方式FA模型不适用。

示例:

  1. const context = getContext(this) as any
  2. context
  3. .resourceManager
  4. .getString($r('app.string.entry_desc').id)
  5. .then(value => {
  6. this.message = value.toString()
  7. })

如何实现页面加载前从接口获取数据

适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型

aboutToAppear函数中使用异步接口获取页面数据,使用@State修饰变量,数据获取完成后根据变量自动刷新页面。

  1. @Entry
  2. @Component
  3. struct Test6Page {
  4. // 数据获取成功,会自动刷新页面
  5. @State message: string = 'loading.....'
  6. aboutToAppear(){
  7. // 模拟异步接口获取数据
  8. setTimeout(()=>{
  9. this.message = 'new msg'
  10. },3000)
  11. }
  12. build() {
  13. Row() {
  14. Column() {
  15. Text(this.message)
  16. .fontSize(50)
  17. .fontWeight(FontWeight.Bold)
  18. }
  19. .width('100%')
  20. }
  21. .height('100%')
  22. }
  23. }

worker线程与主线程是否运行在相同的全局上下文中

适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型

worker线程与主线程不在同一个上下文中,它们使用数据通信的方式交互。

OpenHarmony上url编码使用哪个接口

适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型

使用全局函数encodeURI进行编码,使用decodeURI进行解码。例如空格字符,编码后为%20。

OpenHarmony有解析xml的接口吗

适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型

使用ConvertXML的convert接口可以将xml文本解析为JavaScript对象。

应用图标一多设置

适用于:OpenHarmony SDK3.0, API9 Stage模型

借助资源限定词能力,实现应用图标的一多配置,

OpenHarmony的systemTime.getCurrentTime()接口和JS的new Date().getTime()有区别吗

适用于:OpenHarmony SDK3.2.6.3, API9 Stage模型

systemTime.getCurrentTime(false)和new Date().getTime()一样,都是返回1970年1月1日至今的毫秒数;systemTime.getCurrentTime(true)返回1970年1月1日至今的纳秒数。两种方式都是系统时间。

@BuilderParam装饰器,组件传参问题

适用于:OpenHarmony SDK3.2.6.5, API9 Stage模型

对@BuilderParam修饰的属性进行赋值时不带参数(如:content: this.specificParam),则此属性的类型需定义成无返回值的函数(如:@BuilderParam content: () => void);若带参数(如:callContent: this.specificParam1("111")),则此属性的类型需定义成any(如:@BuilderParam callContent: any;),

创建woker时报错“Too many wokers,the number of worker exceeds the maximum”如何处理

使用于:OpenHarmony SDK 3.2.6.5版本

这是因为每个应用的worker上限为7个,因此在worker使用完成后需要通过termiate方法释放worker。

OpenHarmony推荐的多线程解决方案是什么

使用于:OpenHarmony SDK 3.2.6.5版本 API9 Stage模型

OpenHarmony推荐使用worker来处理多线程场景。

使用@Builder装饰包含自定义组件的方法与普通方法的区别是什么

适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型

@Builder装饰的方法中使用了自定义组件,那么该方法每次被调用时,对应的自定义组件均会重新创建。

状态管理中@Watch监听,数组内对象属性变化无法触发watch回调函数

适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型

使用@Watch监听的对象,只能监听一层数据变化,多层次数据变更无法监听,同@State状态管理机制一致

如何监听@State深层数据变化

适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型

通过@Observed配合@ObjectLink装饰符实现。

如何实现字符串编解码

适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型

通过util工具函数模块中的TextEncoder和TextDecoder进行解码。

如何导入和导出namespace命名空间

适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型

  • namespace导出

    1. namespace Util{
    2. export function getTime(){
    3. return Date.now()
    4. }
    5. }
    6. export default Util
  • namespace导入

    1. import Util from './util'
    2. Util.getTime()

worker线程中能进行关系型数据库的操作吗

适用于:OpenHarmony SDK 3.2.5.5版本, API9 Stage模型

当前不支持将UI主线程中的rdb数据库对象发送给Worker线程后进行操作。Worker线程中使用rdb数据库,需要重新获取rdb数据库的对象。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/942794
推荐阅读
相关标签
  

闽ICP备14008679号