写点什么

【每日学点 HarmonyOS Next 知识】web 网络拦截、对话框、网页重定向、数据作用域、多线程

作者:轻口味
  • 2025-03-07
    北京
  • 本文字数:2410 字

    阅读完需:约 8 分钟

【每日学点HarmonyOS Next知识】web网络拦截、对话框、网页重定向、数据作用域、多线程

1、HarmonyOS 在 web 网络拦截情况下,在网络失败情况下,web 组件的 onErrorReceive 和 onHttpErrorReceive 均未回调?

在网络拦截情况下,在网络失败情况下,web 组件的 onErrorReceive 和 onHttpErrorReceive 均未回调 拦截接口使用如下: OH_ArkWeb_CreateResponse(&arkResponse); OH_ArkWebResponse_SetError(arkResponse, ARKWEB_ERR_FAILED); OH_ArkWebResourceHandler_DidReceiveResponse(arkResourceHandler, arkResponse);


如果在 response 阶段发生错误 通过 response->seterror 来回调 如果是数据传输过程中发生错误 用 OH_ArkWebResourceHandler_DidFailWithError

2、HarmonyOS openCustomDialog 进入新页面后 dialog 出现在新页面?

openCustomDialog 进入新页面后 dialog 出现在新页面


方案是跳转页面时先关闭 dialog 回来再打开,可以使用全局变量来控制弹窗的关闭和显示参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-appstorage-V5


AppStorage 是应用全局的 UI 状态存储,是和应用的进程绑定的,由 UI 框架在应用程序启动时创建,为应用程序 UI 状态属性提供中央存储。


和 AppStorage 不同的是,LocalStorage 是页面级的,通常应用于页面内的数据共享。而 AppStorage 是应用级的全局状态共享,还相当于整个应用的“中枢”,持久化数据 PersistentStorage 和环境变量 Environment 都是通过 AppStorage 中转,才可以和 UI 交互。


本文仅介绍 AppStorage 使用场景和相关的装饰器:@StorageProp 和 @StorageLink。


AppStorage 是应用全局的 UI 状态存储,不同于 @State 等装饰器仅能在组件树上传递,AppStorage 的目的是为了给开发者提供更大范围的跨 ability 基本的数据共享。在阅读本文档前,建议开发者对状态管理框架中 AppStorage 的定位有一个宏观了解。建议提前阅读:状态管理概述。


AppStorage 还提供了 API 接口,可以让开发者通过接口在自定义组件外手动触发 AppStorage 对应 key 的增删改查,建议配合 AppStorage API 文档阅读。

3、HarmonyOS ArkWeb 网页重定向问题?

如果是在 web 组件中,可以使用 onLoadIntercept 判断重定向,进行相关操作,文档可参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-web-V5#onloadintercept10

4、HarmonyOS 自定义组件的自定义布局 数据的作用域不对?

参考代码:


import { TeacherInfoModel } from './TeacherInfoModel';import { promptAction } from '@kit.ArkUI';
@Observedexport class TeacherInfoViewModel { teacherInfoModel: TeacherInfoModel = new TeacherInfoModel();
changeId(id: string): TeacherInfoModel { this.teacherInfoModel.id = id; return this.teacherInfoModel; }
//检查 checkModel(teacherInfoModel: TeacherInfoModel) { this.teacherInfoModel = teacherInfoModel; }}
复制代码


import { getTeacherInfoModel, TeacherInfoModel } from '../comp/TeacherInfoModel';import { TeacherInfoViewModel } from '../comp/TeacherInfoViewModel';import { CommComponent } from './CommComponent';import { ComponentStatus } from './CommonEnums';import { promptAction } from '@kit.ArkUI';
@Entry@Componentstruct Index { @State teacherInfoViewModel: TeacherInfoViewModel = new TeacherInfoViewModel(); @State state: ComponentStatus = ComponentStatus.LOADING
aboutToAppear(): void { this.state = ComponentStatus.LOADING; //发起网络请求 this.requestNetWork(); }
private requestNetWork() { getTeacherInfoModel("参数").then((res: TeacherInfoModel) => { this.teacherInfoViewModel.checkModel(res); this.state = ComponentStatus.SUCCESS; }); }
build() { Row() { Column() { CommComponent({ componentStatus: this.state, data: this.teacherInfoViewModel.teacherInfoModel, builder: () => { this.successBuild() }, builderLoading: () => { this.loadingBuild() } }).onClick((e) => { this.requestNetWork(); }) } .width('100%') } .height('100%') }
@Builder successBuild() {
//问题1 id数据不会更新
Column() { Text(`网络数据:${this.teacherInfoViewModel?.teacherInfoModel?.id} `) .fontSize(50) .fontWeight(FontWeight.Bold) } .width('100%')
.onClick(() => {
//问题: 点击重新请求 后看问题1 ID不会更新 let param = this.teacherInfoViewModel.changeId("onClickID") as TeacherInfoModel
//此处仅用到@State,直接修改对象从而触发UI刷新 let teacherInfoViewModelTemp: TeacherInfoViewModel = new TeacherInfoViewModel() teacherInfoViewModelTemp.teacherInfoModel = param this.teacherInfoViewModel = teacherInfoViewModelTemp
promptAction.showToast({ message: `更新后的id为${JSON.stringify(param)}` })

}) }
@Builder loadingBuild() { Column() { Text(`Loading... `) .fontSize(50) .fontWeight(FontWeight.Bold) } .width('100%')
}}
复制代码

5、HarmonyOS 能够在主线程给 Worker 传递一个函数,让这个函数在 Worker 的线程中执行么?

能够在主线程给 Worker 传递一个函数,让这个函数在 Worker 的线程中执行么?


尝试以下方案,在主线程中定义一个函数,并通过 Worker 的 onmessage 接口将这个函数传递给 Worker 线程执行。


参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-worker-V5#onmessage9

发布于: 刚刚阅读数: 5
用户头像

轻口味

关注

🏆2021年InfoQ写作平台-签约作者 🏆 2017-10-17 加入

Android、音视频、AI相关领域从业者。 欢迎加我微信wodekouwei拉您进InfoQ音视频沟通群 邮箱:qingkouwei@gmail.com

评论

发布
暂无评论
【每日学点HarmonyOS Next知识】web网络拦截、对话框、网页重定向、数据作用域、多线程_HarmonyOS_轻口味_InfoQ写作社区