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