HarmonyOS 鸿蒙Next中仓颉自定义组件如何使用“.”链式调用
HarmonyOS 鸿蒙Next中仓颉自定义组件如何使用“.”链式调用
自定义组件
package ohos_app_cangjie_entry.components
import ohos.base.*
import ohos.component.*
import ohos.state_manage.*
import ohos.state_macro_manage.*
import ohos.resource_manager.*
@Component
public class AppHeader {
@State
var message:String = 'message'
func build() {
Text(message)
}
func setMessage(message:String) {
this.message = message
}
}
调用
@Entry
@Component
public class Home {
func build(){
Stack(Alignment.Top) {
Text("home")
.height(150.vp)
.fontSize(20.vp)
AppHeader().setMessage('home')//任何链式调用都会报错
}
.width(100.percent)
.height(100.percent)
}
}
报错
|
20 | AppHeader().setMessage('home')
| ^ expected 3 arguments, found 0
|
note: which is expanded as follows
|
| /* 12.4 */ match(AppHeader().setMessage(this, ObservedProperty("", "home"))) {
| ^^
|
note: the error occurs after the macro is expanded
更多关于HarmonyOS 鸿蒙Next中仓颉自定义组件如何使用“.”链式调用的实战教程也可以访问 https://www.itying.com/category-93-b0.html
目前我的仓颉版本,好像还没有办法
更多关于HarmonyOS 鸿蒙Next中仓颉自定义组件如何使用“.”链式调用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在鸿蒙Next中,仓颉自定义组件使用"."链式调用需遵循以下规则:组件需继承Component
基类并实现ComponentContainer
接口,通过@Component
装饰器声明。链式调用的每个方法必须返回组件实例(this),例如:this.width(100).height(200)
。需在TS/ETS文件中定义类方法,方法内部处理属性后返回当前对象。注意:链式调用仅适用于同一组件实例的属性设置,跨组件需通过状态变量联动。仓颉的链式语法与ArkUI声明式语法并行支持,不可混用。
在HarmonyOS Next的仓颉语言中,自定义组件要实现链式调用需要遵循特定规则。针对你的代码问题,关键在于组件方法需要返回组件实例本身(self/this)。修改AppHeader
组件如下:
@Component
public class AppHeader {
@State
var message:String = 'message'
func build() {
Text(message)
}
func setMessage(message:String) -> AppHeader {
this.message = message
return this
}
}
主要修改点:
- 让
setMessage
方法返回AppHeader
实例(return this
) - 这样就能支持链式调用:
AppHeader().setMessage('home').height(100.vp)
仓颉的链式调用机制要求每个修改属性的方法都必须返回组件实例本身,这与ArkTS的链式调用原理一致。系统组件如Text
的样式方法也是通过返回组件实例来实现链式调用的。