前言:
我们自定义组件的时候,有时候需要传递大量的参数,父组件给子组件传值的时候需要很多参数,就需要每个参数都要写一遍,但是我在看系统的高级组件的时候,它的组件写法很值得我们去学习。那如何优雅的实现自定义组件呢?下面就先看看系统的高级组件的写法。
举例: 它采用的prop形容组件,这个是状态变量的修饰符。 官方解释: Prop变量允许在本地修改,但修改后的变化不会同步回父组件。
当数据源更改时,@Prop装饰的变量都会更新,并且会覆盖本地所有更改。因此,数值的同步是父组件到子组件(所属组件),子组件数值的变化不会同步到父组件。 传递的是待实现的类,我们可以模仿系统的写法自定义自己需要的组件 以及定义一些class,通过class对象传值
SubHeader
export declare struct SubHeader {
@Prop
icon?: ResourceStr;
iconSymbolOptions?: SymbolOptions;
@Prop
primaryTitle?: ResourceStr;
@Prop
secondaryTitle?: ResourceStr;
select?: SelectOptions;
/**
* Operation style of SubHeader.
* @type { OperationStyle }.
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @since 10
*/
/**
* Operation style of SubHeader.
* @type { OperationStyle }.
* @syscap SystemCapability.ArkUI.ArkUI.Full
* @atomicservice
* @since 11
*/
@Prop
operationType?: OperationType;
operationItem?: Array<OperationOption>;
operationSymbolOptions?: Array<SymbolOptions>;
primaryTitleModifier?: TextModifier;
secondaryTitleModifier?: TextModifier;
@BuilderParam
titleBuilder?: () => void;
@Prop
contentPadding?: LocalizedPadding;
}
export declare class SelectOptions {
options: Array<SelectOption>;
selected?: number;
value?: string;
onSelect?: (index: number, value?: string) => void;
}
使用方法
SubHeader({
select: {
options: [{ value: 'aaa' }, { value: 'bbb' }, { value: 'ccc' }],
value: 'selectdemo',
selected: 2,
onSelect: (index: number, value?: string) => {
promptAction.showToast({ message: 'demo' })
}
},
operationType: OperationType.ICON_GROUP,
operationItem: [{
value: $r('app.media.startIcon'),
action: () => {
promptAction.showToast({ message: 'demo' })
}
}]
效果图:
官方写的是不是很优雅,那我们就模仿它的写法自定义组件 通过不同的参数传递控制实现不同的样式UI 但是看不到具体的实现方法。我们只能猜测他们的内部写法。
结语: 系统的组件定义方法值得我们学习,使用系统组件的时候,也有学习的地方,是用Attribuite来定义扩展方法,使用起来更优雅美观,比我们写一大堆系统组件的设置方法优雅美观。这是我自定义的一个组件,
import { ImageModifier, TextModifier, WinImageLabel, WinImageLabelType } from './WinImageLabel';
export declare class DropDownSelectOptions{
options?: Array<SelectOption>;
selected?: number;
value?: string;
icon?:Resource;
selectIcon?:Resource;
onSelect?: (index: number, value?: string) => void;
popType?:string;
}
@Component
export struct WinDropDownItem{
imageAttribute:ImageModifier = new ImageModifier(14,7)
textAttribute:TextModifier = new TextModifier('#000',14)
@Prop
select?: DropDownSelectOptions;
@State customPopup: boolean = false
@Link selectedDate?: Date;
@Link selectDate?:string;
build() {
RelativeContainer(){
Text(this.select?.value)
.attributeModifier(this.textAttribute)
.id('title')
.alignRules({
center:{anchor:'__container__',align:VerticalAlign.Center},
left:{anchor:'__container__',align:HorizontalAlign.Start},
})
.height(18)
Image(this.customPopup?this.select?.selectIcon:this.select?.icon)
.attributeModifier(this.imageAttribute)
.id('icon')
.alignRules({
center:{anchor:'__container__',align:VerticalAlign.Center},
left:{anchor:'title',align:HorizontalAlign.End},
})
.margin({left:2})
}
.onClick(()=>{
this.customPopup = !this.customPopup;
if (this.select?.popType == 'date') {
DatePickerDialog.show({
start: new Date("2000-1"),
end: new Date("2030-12"),
selected: this.selectedDate,
lunar: false,
disappearTextStyle: {color: '#efefef', font: {size: '16fp'}},
textStyle: {color: '#e0e0e0', font: {size: '18fp', weight: FontWeight.Normal}},
selectedTextStyle: {color: '#ff182431', font: {size: '14fp', weight: FontWeight.Regular}},
alignment:DialogAlignment.Bottom,
onDateAccept: (value: Date) => {
this.selectedDate = value
console.info("DatePickerDialog:onDateAccept()" + value.toString())
},
onCancel: () => {
console.info("DatePickerDialog:onCancel()")
},
onDateChange: (value: Date) => {
console.info("DatePickerDialog:onDateChange()" + value.toString())
}
})
}
})
.width('100%')
.height(18)
}
}
效果如下: ![2
最后呢,很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。
而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙NEXT星河版OpenHarmony开发文档》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点
如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。
高清完整版请点击→《鸿蒙NEXT星河版开发学习文档》
针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细资料鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,帮助大家在技术的道路上更进一步。
《鸿蒙 (OpenHarmony)开发学习视频》
《鸿蒙生态应用开发V2.0白皮书》
《鸿蒙 (OpenHarmony)开发基础到实战手册》
《鸿蒙开发基础》
《鸿蒙开发进阶》
《鸿蒙开发实战》
获取这份鸿蒙星河版学习资料,请点击→《鸿蒙NEXT星河版开发学习文档》
总结
鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发。
并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行!