HarmonyOS 鸿蒙Next 在@Builder方法里使用的自定义组件,如果有@LINK修饰的属性,还能使用@Builder函数生成组件吗

发布于 1周前 作者 zlyuanteng 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 在@Builder方法里使用的自定义组件,如果有@LINK修饰的属性,还能使用@Builder函数生成组件吗

我这边想给一个组件A绑定一个模态视图,模态实图的官方文档https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-modal-transition-V5

模态视图要求传入的组件生产方法必须是CustomBuilder的类型,这就要求必须通过@Builder方法构建组件,这个时候,我们在@Builder的方法里面有用到一个我们自己封装的组件,这个组件有个属性使用了@LINK修饰

@Builder
export function UserProtocolWebPage(title:string, protocol:string= ‘http://www.baidu.com’,leftClick:()=>void){
Flex({ direction: FlexDirection.Column }) {
Row() {
Row() {
Image($r(‘app.media.icon_back_arrow’))
.objectFit(ImageFit.None)
.width($r(‘app.float.title_bar_back_image’))
.height($r(‘app.float.title_bar_back_image’))
.onClick(() => {
leftClick();
})
.visibility(Visibility.Visible)
.accessibilityText(‘返回上一级’)
}.width(‘20%’)
Text(title)
.fontSize(18)
.textAlign(TextAlign.Center)
.width(‘60%’)
}
.backgroundColor($r(‘app.color.default_page_background’))

//报错 Assigning the attribute ‘protocol’ to the ‘@Link’ decorated attribute ‘url’ is not allowed. <ArkTSCheck>
TestWeb({url:protocol,controller:new webview.WebviewController(),
innerJsCallback: new InnerDemo(),
scrollY: 0,
mProgressValue: 0,
mPageLifeState: 0
})
}
.height(‘100%’)
.width(‘100%’)
}

@Component
export struct TestWeb {
controller: webview.WebviewController = new webview.WebviewController();
@Link url: string;

}

其中TestWeb组件的url参数在z组件内为LINK修饰,且为三方组件,我们不可以修改,怎么去解决这个问题?

我们可以把这个UserProtocolWebPage这个方法写到某个页面内,然后传入一个@stste修饰的变量,但是我们目的是为了抽离逻辑,多处使用,不想每个页面都去写一遍,这个时候,就不知道怎么处理这个属性了

2 回复
[@Link](/user/Link)必须要使用[@State](/user/State)修饰的变量初始化,使用普通变量传递是会报错的。
 

在HarmonyOS鸿蒙Next系统中,关于@Builder方法里使用自定义组件并包含@LINK修饰属性的情况,理论上是可以继续使用@Builder函数生成组件的,但需要注意以下几点:

  1. @LINK修饰的属性处理@LINK通常用于定义组件间的连接关系,这种关系在组件构建过程中需要被正确处理。@Builder方法需要能够解析并构建这些连接关系,确保组件间的依赖和通信能够正确建立。

  2. 自定义组件的兼容性:确保自定义组件本身符合HarmonyOS的组件规范,并且@Builder方法能够识别并处理该组件的所有属性和事件。

  3. 构建过程的完整性:在使用@Builder函数生成组件时,确保所有必要的参数和配置都已正确提供,以避免构建失败或运行时错误。

  4. 文档和示例参考:建议参考HarmonyOS的官方文档和示例代码,了解如何正确使用@Builder方法和处理@LINK修饰的属性。

综上所述,虽然理论上可以使用@Builder函数生成包含@LINK修饰属性的自定义组件,但具体实现可能需要根据实际情况进行调整和优化。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部