|
|
|
|
### 常用组件
|
|
|
|
|
|
|
|
|
|
##### 切换按钮
|
|
|
|
|
|
|
|
|
|
```tsx
|
|
|
|
|
ToggleType.Switch 开关
|
|
|
|
|
ToggleType.Checkbox 复选框
|
|
|
|
|
ToggleType.Button 按钮
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
##### 文本输入
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
TextInput
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
##### 进度条
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
Progress
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
##### 弹窗
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
import promptAction form '@ohos.promptAction'
|
|
|
|
|
|
|
|
|
|
showToast()
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
##### 警告对话框
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
AlertDialog
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
##### 操作列表弹窗
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
ActionSheet
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##### 选择器弹窗
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
TextPickerDialog文本选择器
|
|
|
|
|
DatePickerDialog日期选择器
|
|
|
|
|
TimePickerDialog时间选择器
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##### 自定义弹窗
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 样式复用
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 状态管理
|
|
|
|
|
|
|
|
|
|
#### @State
|
|
|
|
|
|
|
|
|
|
```鸿蒙
|
|
|
|
|
@Entry
|
|
|
|
|
@Component
|
|
|
|
|
struct Index{
|
|
|
|
|
@State count: number = 1;
|
|
|
|
|
build() {
|
|
|
|
|
Column({space: 50}){
|
|
|
|
|
Row({space: 10}){
|
|
|
|
|
Text('@State')
|
|
|
|
|
Counter(){
|
|
|
|
|
Text(this.count.toString())
|
|
|
|
|
}
|
|
|
|
|
.onInc(() => this.count++)
|
|
|
|
|
.onDec(() => this.count--)
|
|
|
|
|
}
|
|
|
|
|
.width('100%')
|
|
|
|
|
.backgroundColor('#CCE3CB')
|
|
|
|
|
.padding(10)
|
|
|
|
|
.borderRadius(20)
|
|
|
|
|
.justifyContent(FlexAlign.Center)
|
|
|
|
|
}
|
|
|
|
|
.height('100%')
|
|
|
|
|
.width('100%')
|
|
|
|
|
.justifyContent(FlexAlign.Center)
|
|
|
|
|
.backgroundColor(Color.White)
|
|
|
|
|
.padding(10)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### @Prop
|
|
|
|
|
|
|
|
|
|
父组件的变化可以同步到子组件,反之不可
|
|
|
|
|
|
|
|
|
|
Prop装饰的变量不允许本地初始化,只能通过父组件向子组件传参进行初始化
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
@Entry
|
|
|
|
|
@Component
|
|
|
|
|
struct Parent {
|
|
|
|
|
@State count: number = 1;
|
|
|
|
|
|
|
|
|
|
build() {
|
|
|
|
|
Column() {
|
|
|
|
|
Column({ space: 10 }) {
|
|
|
|
|
//父组件标题
|
|
|
|
|
Text('父组件').textStyle()
|
|
|
|
|
|
|
|
|
|
//父组件计数器
|
|
|
|
|
Row({ space: 10 }) {
|
|
|
|
|
Text('@State').textStyle()
|
|
|
|
|
Counter() {
|
|
|
|
|
Text(this.count.toString()).textStyle()
|
|
|
|
|
}
|
|
|
|
|
.onInc(() => this.count++)
|
|
|
|
|
.onDec(() => this.count--)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//子组件
|
|
|
|
|
Child({ count: this.count })
|
|
|
|
|
}
|
|
|
|
|
.containerStyle('#EFEFEF')
|
|
|
|
|
}
|
|
|
|
|
.height('100%')
|
|
|
|
|
.width('100%')
|
|
|
|
|
.justifyContent(FlexAlign.Center)
|
|
|
|
|
.backgroundColor(Color.White)
|
|
|
|
|
.padding(10)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Component
|
|
|
|
|
struct Child {
|
|
|
|
|
@Prop count: number ;
|
|
|
|
|
|
|
|
|
|
build() {
|
|
|
|
|
Column({ space: 10 }) {
|
|
|
|
|
//子组件标题
|
|
|
|
|
Text('子组件').textStyle()
|
|
|
|
|
|
|
|
|
|
//子组件计数器
|
|
|
|
|
Row({ space: 10 }) {
|
|
|
|
|
Text('@Prop').textStyle()
|
|
|
|
|
Counter() {
|
|
|
|
|
Text(this.count.toString()).textStyle()
|
|
|
|
|
}
|
|
|
|
|
.onInc(() => this.count++)
|
|
|
|
|
.onDec(() => this.count--)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.containerStyle("#CCE3CB")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Extend(Text) function textStyle() {
|
|
|
|
|
.fontSize(25)
|
|
|
|
|
.fontWeight(FontWeight.Bold)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Extend(Column) function containerStyle(color: ResourceColor) {
|
|
|
|
|
.width('100%')
|
|
|
|
|
.backgroundColor(color)
|
|
|
|
|
.padding(10)
|
|
|
|
|
.borderRadius(20)
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
父变子同步,子变父不变
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### @Link
|
|
|
|
|
|
|
|
|
|
父子双向同步
|
|
|
|
|
|
|
|
|
|
变量不允许本地初始化,只能通过父组件向子组件传参进行初始化
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
@Entry
|
|
|
|
|
@Component
|
|
|
|
|
struct Parent {
|
|
|
|
|
@State count: number = 1;
|
|
|
|
|
|
|
|
|
|
build() {
|
|
|
|
|
Column() {
|
|
|
|
|
Column({ space: 10 }) {
|
|
|
|
|
//父组件标题
|
|
|
|
|
Text('父组件').textStyle()
|
|
|
|
|
//父组件计数器
|
|
|
|
|
Row({ space: 10 }) {
|
|
|
|
|
Text('@State').textStyle()
|
|
|
|
|
Counter() {
|
|
|
|
|
Text(this.count.toString()).textStyle()
|
|
|
|
|
}
|
|
|
|
|
.onInc(() => this.count++)
|
|
|
|
|
.onDec(() => this.count--)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//子组件
|
|
|
|
|
Child({ count: $count })
|
|
|
|
|
}
|
|
|
|
|
.containerStyle(Color.White)
|
|
|
|
|
}
|
|
|
|
|
.height('100%')
|
|
|
|
|
.width('100%')
|
|
|
|
|
.justifyContent(FlexAlign.Center)
|
|
|
|
|
.backgroundColor('#EFEFEF')
|
|
|
|
|
.padding(10)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Component
|
|
|
|
|
struct Child {
|
|
|
|
|
@Link count: number;
|
|
|
|
|
|
|
|
|
|
build() {
|
|
|
|
|
Column({ space: 10 }) {
|
|
|
|
|
//子组件标题
|
|
|
|
|
Text('子组件').textStyle()
|
|
|
|
|
//子组件计数器
|
|
|
|
|
Row({ space: 10 }) {
|
|
|
|
|
Text('@Link').textStyle()
|
|
|
|
|
Counter() {
|
|
|
|
|
Text(this.count.toString()).textStyle()
|
|
|
|
|
}
|
|
|
|
|
.onInc(() => this.count++)
|
|
|
|
|
.onDec(() => this.count--)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.containerStyle('#CCE3CB')
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Extend(Text) function textStyle() {
|
|
|
|
|
.fontSize(25)
|
|
|
|
|
.fontWeight(FontWeight.Bold)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Extend(Column) function containerStyle(color: ResourceColor) {
|
|
|
|
|
.width('100%')
|
|
|
|
|
.backgroundColor(color)
|
|
|
|
|
.padding(10)
|
|
|
|
|
.borderRadius(20)
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### @Provide & @Consume
|
|
|
|
|
|
|
|
|
|
用于跨组件层级传递状态信息
|
|
|
|
|
|
|
|
|
|
@Provide 装饰祖先,必须进行本地初始化
|
|
|
|
|
|
|
|
|
|
@Consume 装饰后代,不允许本地初始化,通过相同变量名绑定
|
|
|
|
|
|
|
|
|
|
双向同步
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
@Entry
|
|
|
|
|
@Component
|
|
|
|
|
struct GrandParent {
|
|
|
|
|
@Provide count: number = 1;
|
|
|
|
|
|
|
|
|
|
build() {
|
|
|
|
|
Column() {
|
|
|
|
|
Column({ space: 10 }) {
|
|
|
|
|
//祖先组件标题
|
|
|
|
|
Text('祖先组件').textStyle()
|
|
|
|
|
//祖先组件计数器
|
|
|
|
|
Row({ space: 10 }) {
|
|
|
|
|
Text('@Provide').textStyle()
|
|
|
|
|
Counter() {
|
|
|
|
|
Text(this.count.toString()).textStyle()
|
|
|
|
|
}
|
|
|
|
|
.onInc(() => this.count++)
|
|
|
|
|
.onDec(() => this.count--)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//父组件
|
|
|
|
|
Parent()
|
|
|
|
|
}
|
|
|
|
|
.containerStyle(Color.White)
|
|
|
|
|
}
|
|
|
|
|
.height('100%')
|
|
|
|
|
.width('100%')
|
|
|
|
|
.justifyContent(FlexAlign.Center)
|
|
|
|
|
.backgroundColor('#EFEFEF')
|
|
|
|
|
.padding(10)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Component
|
|
|
|
|
struct Parent {
|
|
|
|
|
build() {
|
|
|
|
|
Column({ space: 10 }) {
|
|
|
|
|
//父组件标题
|
|
|
|
|
Text('父组件').textStyle()
|
|
|
|
|
//子组件
|
|
|
|
|
Child()
|
|
|
|
|
}
|
|
|
|
|
.containerStyle('#CCE3CB')
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Component
|
|
|
|
|
export struct Child {
|
|
|
|
|
@Consume count: number;
|
|
|
|
|
|
|
|
|
|
build() {
|
|
|
|
|
Column({ space: 10 }) {
|
|
|
|
|
//子组件标题
|
|
|
|
|
Text('子组件').textStyle()
|
|
|
|
|
//子组件计数器
|
|
|
|
|
Row({ space: 10 }) {
|
|
|
|
|
Text('@Consume').textStyle()
|
|
|
|
|
Counter() {
|
|
|
|
|
Text(this.count.toString()).textStyle()
|
|
|
|
|
}
|
|
|
|
|
.onInc(() => this.count++)
|
|
|
|
|
.onDec(() => this.count--)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.containerStyle('#f6c867')
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Extend(Text) function textStyle() {
|
|
|
|
|
.fontSize(25)
|
|
|
|
|
.fontWeight(FontWeight.Bold)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Extend(Column) function containerStyle(color: ResourceColor) {
|
|
|
|
|
.width('100%')
|
|
|
|
|
.backgroundColor(color)
|
|
|
|
|
.padding(10)
|
|
|
|
|
.borderRadius(20)
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|