arkts-prop
介绍
本示例展示了如何创建自定义弹窗,设置自定义弹窗的背景颜色、圆角半径、对齐方式、边框颜色、边框样式等功能。 @Prop装饰器。
效果预览
| 首页 | CustomDialogController_CAPI页面 | OpenCustomDialog_CAPI页面 |
|---|---|---|
![]() |
![]() |
![]() |
使用说明
- 安装编译生成的hap包,并打开应用;
- 首页面会出现页面列表,点击此列表项进入对应页面示例界面;
工程目录
ArkTsProp2Samlpe
entry
└── src
│ ├── main
│ │ ├── ets
│ │ │ ├── entryability
│ │ │ │ └── EntryAbility.ets
│ │ │ ├── entrybackupability
│ │ │ │ └── EntryBackupAbility.ets
│ │ │ └── pages
│ │ │ ├── Index.ets
│ │ │ ├── PageEight.ets //示例8:@Prop嵌套场景
│ │ │ ├── PageEighteen.ets //示例18:@Prop装饰器使用
│ │ │ ├── PageEleven.ets //示例:装饰Set类型变量使用
│ │ │ ├── PageFifteen.ets //示例:使用a.b(this.object)形式调用,不会触发UI刷新
│ │ │ ├── PageFive.ets //示例5:从父组件中的@State类对象属性到@Prop简单类型的同步
│ │ │ ├── PageFour.ets //示例4:父组件@State数组项到子组件@Prop简单数据类型同步
│ │ │ ├── PageFourteen.ets //示例14:@Prop需要被初始化,如果没有进行本地初始化的,则必须通过父组件进行初始化
│ │ │ ├── PageNine.ets //示例9:@Prop嵌套场景的数据结构。
│ │ │ ├── PageOne.ets //示例1:@Prop装饰的数据可以观察到以下变化。
│ │ │ ├── PageSeven.ets //示例7:@Prop本地初始化不和父组件同步
│ │ │ ├── PageSeventeen.ets //示例17:@Prop嵌套场景使用
│ │ │ ├── PageSix.ets //示例6:从父组件中的@State类对象属性到@Prop简单类型的同步
│ │ │ ├── PageSixteen.ets //示例:@Prop嵌套场景
│ │ │ ├── PageTen.ets //示例10:装饰Map类型变量使用
│ │ │ ├── PageThirteen.ets //示例13:Prop支持联合类型实例使用
│ │ │ ├── PageThree.ets//示例3:当装饰的类型是Object或class复杂类型时,可以观察到自身的赋值和第一层的属性的变化。
│ │ │ ├── PageTow.ets //示例2:父组件@State到子组件@Prop简单数据类型同步
│ │ │ └── PageTwelve.ets //示例12:装饰Date类型变量使用
│ │ ├── module.json5
│ │ └── resources
│ │ ├── base
│ │ │ ├── element
│ │ │ │ ├── color.json
│ │ │ │ ├── float.json
│ │ │ │ └── string.json
│ │ │ ├── media
│ │ │ │ ├── background.png
│ │ │ │ ├── foreground.png
│ │ │ │ ├── layered_image.json
│ │ │ │ └── startIcon.png
│ │ │ └── profile
│ │ │ ├── backup_config.json
│ │ │ ├── main_pages.json
│ │ │ └── router_map.json
│ │ ├── dark
│ │ │ └── element
│ │ │ └── color.json
│ │ └── rawfile
│ ├── mock
│ │ └── mock-config.json5
│ ├── ohosTest
│ │ ├── ets
│ │ │ └── test
│ │ │ ├── Ability.test.ets
│ │ │ └── List.test.ets
│ │ └── module.json5
│ └── test
│ ├── List.test.ets
│ └── LocalUnit.test.ets
具体实现
- 简单类型单向同步实现:子组件用@Prop装饰基础类型变量(如@Prop count: number = 0),从父组件@State变量接收初始值;子组件可通过按钮点击等操作本地修改count(如减 1),修改仅作用于子组件,父组件@State变量更新时(如加 1),会覆盖子组件count的本地修改并触发子组件刷新。
- 数组项同步实现:父组件@State arr: number[] = [1,2,3],子组件@Prop value: number = 0接收数组项(如Child({ value: this.arr[0] }));子组件点击修改value不影响父组件数组,父组件替换整个数组(如this.arr = [3,4,5])时,子组件value会同步更新为新数组对应项,未变更的数组项组件(如值为 3 的项)保持原有状态。
- 类对象属性同步实现:定义普通类Book(含title、readIt等属性),子组件@Prop book: Book = new Book('', 0)接收父组件@State book实例;子组件点击标记book.readIt = true(标记已读),修改不回传父组件,父组件更新book属性时,子组件@Prop会同步刷新,多子组件接收同一父组件book实例时,各自修改互不干扰。
- Map 类型同步实现(API 11+):子组件@Prop value: Map<number, string> = new Map([[0,'a']])接收父组件@State Map;子组件可通过set(添加键值对)、clear(清空)、delete(删除键)等方法修改 Map,也可直接赋值新 Map,父组件修改 Map 时会同步到子组件,双方修改均能触发 UI 刷新,通过ForEach遍历 Map 项展示变化。
- Set 类型同步实现(API 11+):子组件@Prop message: Set = new Set([0,1,2])接收父组件@State Set;子组件通过add(新增元素)、clear(清空)、delete(删除元素)修改 Set,父组件更新 Set 时同步到子组件,用ForEach遍历 Set 项(需转为数组Array.from(this.message.entries())),实时展示 Set 的变化。
- Date 类型同步实现:子组件@Prop selectedDate: Date = new Date('')接收父组件@State parentSelectedDate;子组件可通过setFullYear(修改年份)、setDate(修改日期)或直接赋值新 Date(如this.selectedDate = new Date('2023-09-09'))修改日期,父组件修改日期时同步到子组件,双方修改均能通过DatePicker组件实时展示。
- 联合类型同步实现(API 11+):定义类Animals,子组件@Prop animal: Animals | undefined接收父组件@State animal(初始为new Animals('lion'));子组件可点击将animal设为new Animals('Tiger')或undefined,父组件修改animal属性(如this.animal.name = 'Dog')或设为undefined时,子组件会同步刷新,通过文本展示animal的类型或属性。
- 嵌套类同步实现:嵌套类每层用@Observed装饰(如@Observed class Son、@Observed class Father,Father含Son类型属性);子组件@Prop child: Son = new Son('')接收父组件@State person: Father的son属性;父组件修改this.person.son.title = 'ArkUI'时,子组件child能感知变化并刷新,子组件点击修改child.title不回传父组件。
- 本地初始化与父组件传值控制实现:@Prop无本地初始化(如@Prop customCounter: number)时,必须从父组件传值(如MyComponent({ customCounter: this.mainCounter }));有本地初始化(如@Prop customCounter2: number = 5)时,父组件可传值也可不传,传值会覆盖本地初始化值,子组件本地修改customCounter2不影响父组件。
- 避免属性修改不刷新实现:当@Prop装饰对象类型时,避免直接用a.b(this.object)形式修改属性(如静态方法Score.changeScore1(this.score)),此类操作无法触发 UI 刷新;需先将@Prop对象赋值给临时变量(如let score1 = this.score),再通过临时变量修改属性(如Score.changeScore1(score1)),让对象带上 Proxy 代理,确保修改能触发 UI 刷新。
相关权限
不涉及
依赖
不涉及
约束和限制
-
本示例支持标准系统上运行,支持设备:华为手机。
-
本示例为Stage模型,支持API22版本SDK,版本号:6.0.0.47,镜像版本号:OpenHarmony_6.0.0 Release。
-
本示例需要使用DevEco Studio 6.0.0 Release (Build Version: 6.0.0.858, built on September 24, 2025)及以上版本才可编译运行。
下载
如需单独下载本工程,执行如下命令:
git init
git config core.sparsecheckout true
echo ArkUISample/Prop > .git/info/sparse-checkout
git remote add origin https://gitcode.com/harmonyos_samples/guide-snippets.git
git pull origin master


