当前位置: 首页 > article >正文

【每日学点鸿蒙知识】Provider、Navigation返回参数、隐私声明问题、Text判断函数、自定义hvigor插件

1、HarmonyOS @Provider与@Consume的数据交互方式?

这个只能单向传递,也就是说只允许一个祖先组件来完成变量的更新,孙子组件只能读取不能更改。如果我的子孙组件想要改变该数据变量,请问有什么好的办法没?逐层传递回祖先再改变太繁杂了。

@Provide装饰器和@Consume装饰器,可以实现与后代组件双向同步。不需要逐层传递回祖先。参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-provide-and-consume-V5

@Provide和@Consume,应用于与后代组件的双向数据同步,应用于状态数据在多个层级之间传递的场景。不同于上文提到的父子组件之间通过命名参数机制传递,@Provide和@Consume摆脱参数传递机制的束缚,实现跨层级传递。
其中@Provide装饰的变量是在祖先组件中,可以理解为被“提供”给后代的状态变量。@Consume装饰的变量是在后代组件中,去“消费(绑定)”祖先组件提供的变量。

@Provide/@Consume装饰的状态变量有以下特性:

  • @Provide装饰的状态变量自动对其所有后代组件可用,即该变量被“provide”给他的后代组件。由此可见,@Provide的方便之处在于,开发者不需要多次在组件之间传递变量。
  • 后代通过使用@Consume去获取@Provide提供的变量,建立在@Provide和@Consume之间的双向数据同步,与@State/@Link不同的是,前者可以在多层级的父子组件之间传递。
  • @Provide和@Consume可以通过相同的变量名或者相同的变量别名绑定,建议类型相同,否则会发生类型隐式转换,从而导致应用行为异常。
@Component
struct CompD {
  // @Consume装饰的变量通过相同的属性名绑定其祖先组件CompA内的@Provide装饰的变量
  @Consume reviewVotes: number;

  build() {
    Column() {
      Text(`reviewVotes(${this.reviewVotes})`)
      Button(`reviewVotes(${this.reviewVotes}), give +1`)
        .onClick(() => this.reviewVotes += 1)
    }
    .width('50%')
  }
}

@Component
struct CompC {
  build() {
    Row({ space: 5 }) {
      CompD()
      CompD()
    }
  }
}

@Component
struct CompB {
  build() {
    CompC()
  }
}

@Entry
@Component
struct CompA {
  // @Provide装饰的变量reviewVotes由入口组件CompA提供其后代组件
  @Provide reviewVotes: number = 0;

  build() {
    Column() {
      Button(`reviewVotes(${this.reviewVotes}), give +1`)
        .onClick(() => this.reviewVotes += 1)
      CompB()
    }
  }
}
2、HarmonyOS 用Navigation打开页面,页面返回的时候,怎么拿到回传参数?

现在有个场景,网络请求的时候,发现session过期,拉起登陆页面,登陆后,怎么把数据通知回之前拉起网络的地方。网络模块没有界面。每次发网络请求的事情,都会判断session是否过期。session过期,就会拉起登录页面。登录成功后,需要重新发起session过期的网络请求。

Navigation的页面间,通过NavPathInfo对象中的params属性,实现从发起页到目标页的数据传递;通过onPop回调参数,实现处理目标页面的返回。Step1:构建NavPathInfo对象,输入需要传递给目标页面的参数。params参数:将需要传递的数据封装起来进行传递,无法传递对象里面的函数。具体的支持参数可以参考指南onPop参数:目标页面触发pop时的返回,在回调中通过PopInfo.info.param获取到返回的对象。

// 发起页 mainPage
let loginParam : LoginParam = new LoginParam()
// 构建pathInfo对象
let pathInfo : NavPathInfo = new NavPathInfo('loginPage', loginParam
  , (popInfo: PopInfo) => {
    let loginParam : LoginParam = popInfo.info.param as LoginParam;
    ...
  })
// 讲参数传递到目标页
this.pageStack.pushDestination(pathInfo, true);

Step2:目标页通过“NavPathStack.getParamByIndex(0)”获取到发起页传递过来的参数

@Component
export struct loginPageView {
  @Consume('pageInfo') pageStack : NavPathStack;

  aboutToAppear(): void {
    this.loginParam = this.pageStack.getParamByIndex(0) as LoginParam;
  }
  ...
}
Step3:目标页通过NavPathStack.pop方法返回起始页,其result参数用来传递需要返回给起始页的对象

@Component
export struct loginPageView {
  @Consume('pageInfo') pageStack : NavPathStack;
  // 页面构建的对象
  private loginParam! : LoginParam;
  ...
  build() {
    NavDestination(){
      ...
      Button('login').onClick( ent => {
        // 将对象返回给起始页
        this.pageStack.pop(this.loginParam, true)
      })
    }
  }
}
3、HarmonyOS 隐私声明咨询?

在发布应用文档(以下链接)中第10点有说明【在“隐私声明”区域提供隐私声明链接。】。请问不提供链接,直接附上声明内容可以吗?https://developer.huawei.com/consumer/cn/doc/app/agc-help-releaseharmony-0000001933963166

请参考:https://developer.huawei.com/consumer/cn/doc/app/50128#h1-1678351326517-0
文档中提到必须提交APP隐私政策链接且与APP内的隐私政策保证完全一致。

开发者在创建应用或更新版本时,必须提交APP隐私政策链接,该链接的内容必须与APP内的隐私政策保证完全一致,并且当您更新了APP内的隐私政策内容时,请您及时更新隐私政策链接的文本内容。

4、HarmonyOS text 如何做到,一行显示的时候居中,超过一行的时候靠左显示?

通过判断行数去设置不同的对其方式

获取行数可以通过以下方法 @ohos.measure可以返回多行文字的宽高,没有返回行数,但可以根据业务场景来计算。https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-measure-V5

超过特定行数(下方以3行为例),样式不同,比如加上展开、收缩。计算文本总高度 let textSize : SizeOptions = measure.measureTextSize({ textContent: this.content, fontSize: 24, constraintWidth: 300 }) 限定宽度和最大行数(3行),计算高度 let textSize2 : SizeOptions = measure.measureTextSize({ textContent: this.content, fontSize: 24, maxLines: 3, constraintWidth: 300 })若textSize.height > textSize2.height,则表示实际高度超过3行,根据判断结果进行业务处理。

5、自定义hvigor插件问题?

我发现bate1 版本,nodejs不在对外暴露,hvigor的代码隐藏在了应用包中,且固定了版本。但是我们在制作自定义hvigor插件的时候,是引用公共npm库的hvigor代码,这样极大可能出现我自定义插件的hvigor版本与应用包内的不一致,不会出现问题吗

关于hvigor插件的开发, 可以参考以下文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-hvigor-plugin-V5
可以尝试参照项目中实际使用hvigor版本,或者文档中的版本。

hvigor允许开发者实现自己的插件,开发者可以定义自己的构建逻辑,并与他人共享。
hvigor主要提供了两种方式来实现插件:基于hvigorfile脚本开发插件、基于typescript项目开发。


http://www.kler.cn/a/457855.html

相关文章:

  • 初入图像处理:水稻剑叶夹角测量
  • 【Hackthebox 中英 Write-Up】通过 POST 请求绕过前端限制:基于 Cookie 的认证与数据提取实操指南
  • AI大模型语音识别转文字
  • 在 CentOS 7 上安装 Node.js 20 并升级 GCC、make 和 glibc
  • 图像处理-Ch7-快速小波变换和小波包
  • redis cluster实验详解
  • 蓝桥杯速成教程{三}(adc,i2c,uart)
  • vulhub-wordpress靶场
  • 区块链安全常见的攻击合约和简单复现,附带详细分析——不安全调用漏洞 (Unsafe Call Vulnerability)【6】
  • 【513. 找树左下角的值 中等】
  • 【Leetcode刷题随笔】977 有序数组的平方
  • google广告 google分析
  • wordpress woodmark max_input_vars = 1000 限制问题
  • 使用proxysql代理mysql连接
  • 【Raven1靶场渗透】
  • 钱币找零.
  • 秒鲨后端之MyBatis【1】环境的搭建和核心配置文件详解(重置)
  • 智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之5
  • vue.js普通组件的注册-全局注册
  • 7-Gin 中自定义控制器 --[Gin 框架入门精讲与实战案例]