【逐日学点HarmonyOS Next知识】web网络拦截、对话框、网页重定向、数据作 ...

打印 上一主题 下一主题

主题 971|帖子 971|积分 2913

【逐日学点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 自界说组件的自界说结构 数据的作用域不对?

参考代码:
  1. import { TeacherInfoModel } from './TeacherInfoModel';
  2. import { promptAction } from '@kit.ArkUI';
  3. @Observed
  4. export class TeacherInfoViewModel {
  5.   teacherInfoModel: TeacherInfoModel = new TeacherInfoModel();
  6.   changeId(id: string): TeacherInfoModel {
  7.     this.teacherInfoModel.id = id;
  8.     return this.teacherInfoModel;
  9.   }
  10.   //检查
  11.   checkModel(teacherInfoModel: TeacherInfoModel) {
  12.     this.teacherInfoModel = teacherInfoModel;
  13.   }
  14. }
复制代码
  1. import { getTeacherInfoModel, TeacherInfoModel } from '../comp/TeacherInfoModel';
  2. import { TeacherInfoViewModel } from '../comp/TeacherInfoViewModel';
  3. import { CommComponent } from './CommComponent';
  4. import { ComponentStatus } from './CommonEnums';
  5. import { promptAction } from '@kit.ArkUI';
  6. @Entry
  7. @Component
  8. struct Index {
  9.   @State teacherInfoViewModel: TeacherInfoViewModel = new TeacherInfoViewModel();
  10.   @State state: ComponentStatus = ComponentStatus.LOADING
  11.   aboutToAppear(): void {
  12.     this.state = ComponentStatus.LOADING;
  13.     //发起网络请求
  14.     this.requestNetWork();
  15.   }
  16.   private requestNetWork() {
  17.     getTeacherInfoModel("参数").then((res: TeacherInfoModel) => {
  18.       this.teacherInfoViewModel.checkModel(res);
  19.       this.state = ComponentStatus.SUCCESS;
  20.     });
  21.   }
  22.   build() {
  23.     Row() {
  24.       Column() {
  25.         CommComponent({
  26.           componentStatus: this.state,
  27.           data: this.teacherInfoViewModel.teacherInfoModel,
  28.           builder: () => {
  29.             this.successBuild()
  30.           },
  31.           builderLoading: () => {
  32.             this.loadingBuild()
  33.           }
  34.         }).onClick((e) => {
  35.           this.requestNetWork();
  36.         })
  37.       }
  38.       .width('100%')
  39.     }
  40.     .height('100%')
  41.   }
  42.   @Builder
  43.   successBuild() {
  44.     //问题1 id数据不会更新
  45.     Column() {
  46.       Text(`网络数据:${this.teacherInfoViewModel?.teacherInfoModel?.id} `)
  47.         .fontSize(50)
  48.         .fontWeight(FontWeight.Bold)
  49.     }
  50.     .width('100%')
  51.     .onClick(() => {
  52.       //问题: 点击重新请求 后看问题1 ID不会更新
  53.       let param = this.teacherInfoViewModel.changeId("onClickID") as TeacherInfoModel
  54.       //此处仅用到@State,直接修改对象从而触发UI刷新
  55.       let teacherInfoViewModelTemp: TeacherInfoViewModel = new TeacherInfoViewModel()
  56.       teacherInfoViewModelTemp.teacherInfoModel = param
  57.       this.teacherInfoViewModel = teacherInfoViewModelTemp
  58.       promptAction.showToast({ message: `更新后的id为${JSON.stringify(param)}` })
  59.     })
  60.   }
  61.   @Builder
  62.   loadingBuild() {
  63.     Column() {
  64.       Text(`Loading... `)
  65.         .fontSize(50)
  66.         .fontWeight(FontWeight.Bold)
  67.     }
  68.     .width('100%')
  69.   }
  70. }
复制代码
5、HarmonyOS 可以大概在主线程给 Worker 传递一个函数,让这个函数在 Worker 的线程中执行么?

可以大概在主线程给 Worker 传递一个函数,让这个函数在 Worker 的线程中执行么?
实验以下方案,在主线程中界说一个函数,并通过Worker的onmessage接口将这个函数传递给Worker线程执行。
参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-worker-V5#onmessage9

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

守听

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表