1、执行如下代码后,页面显示的信息是
答案:B
运行代码:
@Component
struct Child {
label: string = 'Child';
@Builder customBuilder() {};
@Builder customChangeThisBuilder() {};
@BuilderParam customBuilderParam: () => void = this.customBuilder;
@BuilderParam customChangeThisBuilderParam: () => void = this.customChangeThisBuilder;
build() {
Row() {
this.customBuilderParam()
this.customChangeThisBuilderParam()
}
}
}
@Entry
@Component
struct Parent {
label: string = 'Parent';
@Builder componentBuilder() {
Text(`${this.label}`)
}
build() {
Row() {
this.componentBuilder()
Child({
customBuilderParam: this.componentBuilder,
customChangeThisBuilderParam: () : void => {
this.componentBuilder()
}
})
}
}
}
运行结果:
参考:
@BuilderParam装饰器:引用@Builder函数
以下示例对this的指向做了介绍。
build() {
Column() {
// 调用this.componentBuilder()时,this指向当前@Entry所装饰的Parent组件,即label变量的值为"Parent"。
this.componentBuilder()
Child({
// 把this.componentBuilder传给子组件Child的@BuilderParam customBuilderParam,this指向的是子组件Child,即label变量的值为"Child"。
customBuilderParam: this.componentBuilder,
// 把():void=>{this.componentBuilder()}传给子组件Child的@BuilderParam customChangeThisBuilderParam,
// 因为箭头函数的this指向的是宿主对象,所以label变量的值为"Parent"。
customChangeThisBuilderParam: (): void => { this.componentBuilder() }
})
}
}
2、下面代码定义的Repeat组件会执行哪一个组件生成函数的逻辑
答案:D
代码:
Repeat(this.simpleList)
.each((ri) => {
ListItem() {
Text(ri.item)
.fontSize(20)
}
})
.key((item: string, index: number) => 'a')
.virtualScroll()
.template("", (ri) => {
ListItem() {
Text('aaa' + ri.item)
.fontSize(20)
}
})
.template('a', (ri) => {
ListItem() {
Text(ri.item)
.fontSize(20)
}
})
.template('b', (ri) => {
ListItem() {
Text(ri.item)
.fontSize(20)
}
})
.templateId((item: string, index: number) => "")
参考:
each
each(itemGenerator: (repeatItem: RepeatItem<T>) => void): RepeatAttribute<T>
组件生成函数。template和templateId匹配不上的数据项走默认生成函数each。
说明:
each属性必须有,否则运行时会报错。
itemGenerator的参数为RepeatItem,该参数将item和index结合到了一起,请勿将RepeatItem参数拆开使用。
template
template(type: string, itemBuilder: RepeatItemBuilder<T>, templateOptions?: TemplateOptions): RepeatAttribute<T>
复用模板。
例子
// arr是Array<string>类型的数组
// 在List容器组件中使用Repeat,并打开virtualScroll
// 创建模板temp,该模板为数据创建Text组件
List() {
Repeat<string>(this.arr)
.each((obj: RepeatItem<string>) => {})
.virtualScroll()
.template('temp', (obj: RepeatItem<string>) => { ListItem() { Text(obj.item) }})
}
答案: D
应用默认配置为跟随系统切换深浅色模式,如不希望应用跟随系统深浅色模式变化,可主动设置应用的深浅色风格。设置后,应用的深浅色模式固定,不会随系统改变。
onCreate(): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_DARK);
}
3、分析以下代码,找出针对该段代码正确的解释
答案:C
import { webSocket } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';
let defaultIpAddress = "ws://";
let ws = webSocket.createWebSocket();
ws.on('open', (err: BusinessError, value: Object) => {
console.log("on open, status:" + JSON.stringify(value));
// 当收到on('open')事件时,可以通过send()方法与服务器进行通信
ws.send("Hello, server!", (err: BusinessError, value: boolean) => {
if (!err) {
console.log("Message send successfully");
} else {
console.log("Failed to send the message. Err:" + JSON.stringify(err));
}
});
});
答案:A
参考:
verifyLocalPlayer(context: common.UIAbilityContext, thirdUserInfo: ThirdUserInfo): Promise<void>
合规校验接口,校验当前设备登录的华为账号的实名认证、游戏防沉迷信息,通过Promise对象获取返回值。
游戏调用verifyLocalPlayer接口,Game Service Kit校验当前设备登录华为账号的实名认证、游戏防沉迷信息。校验通过后,玩家进入游戏。若校验未通过请根据返回的错误码进行相应处理。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。