• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Stepper
2
3步骤导航器组件,适用于引导用户按照步骤完成任务的导航场景。
4
5
6>  **说明:**
7>
8> 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
9
10
11## 子组件
12
13仅能包含子组件[StepperItem](ts-basic-components-stepperitem.md)。
14
15
16## 接口
17
18Stepper(value?: { index?: number })
19
20
21**参数:**
22
23| 参数名 | 参数类型 | 必填  | 参数描述 |
24| ------| -------- | --------------- | -------- |
25| index | number   | 否 | 设置步骤导航器当前显示StepperItem的索引值。<br/>默认值:0 |
26
27
28## 属性
29
3031
32
33## 事件
34
35| 名称 | 描述 |
36| -------- | -------- |
37| onFinish(callback:&nbsp;()&nbsp;=&gt;&nbsp;void) | 步骤导航器最后一个StepperItem的nextLabel被点击时,并且ItemState属性为Normal时,触发该回调&nbsp;。 |
38| onSkip(callback:&nbsp;()&nbsp;=&gt;&nbsp;void) | 当前显示的StepperItem状态为ItemState.Skip时,nextLabel被点击时触发该回调。 |
39| onChange(callback:&nbsp;(prevIndex?:&nbsp;number,&nbsp;index?:&nbsp;number)&nbsp;=&gt;&nbsp;void) | 点击当前StepperItem的prevLabel进行步骤切换时触发该回调;或点击当前StepperItem的nextLabel,当前页面不为步骤导航器最后一个StepperItem且ItemState属性为Normal时,触发该回调。<br/>-&nbsp;prevIndex:切换前的步骤页索引值。<br/>-&nbsp;index:切换后的步骤页(前一页或者下一页)索引值。 |
40| onNext(callback:&nbsp;(index?:&nbsp;number,&nbsp;pendingIndex?:&nbsp;number)&nbsp;=&gt;&nbsp;void) | 点击StepperItem的nextLabel切换下一步骤时,当前页面不为步骤导航器最后一个StepperItem且ItemState属性为Normal时,触发该回调。<br/>-&nbsp;index:当前步骤页索引值。<br/>-&nbsp;pendingIndex:下一步骤页索引值。 |
41| onPrevious(callback:&nbsp;(index?:&nbsp;number,&nbsp;pendingIndex?:&nbsp;number)&nbsp;=&gt;&nbsp;void) | 点击StepperItem的prevLabel切换上一步骤时触发该回调。<br/>-&nbsp;index:当前步骤页索引值。<br/>-&nbsp;pendingIndex:上一步骤页索引值。 |
42
43
44## 示例
45
46```ts
47// xxx.ets
48@Styles function itemStyle () {
49  .width(336)
50  .height(621)
51  .margin({ top: 48, left: 12 })
52  .borderRadius(24)
53  .backgroundColor('#FFFFFF')
54}
55
56@Extend(Text) function itemTextStyle () {
57  .fontColor('#182431')
58  .fontSize(36)
59  .fontWeight(500)
60  .opacity(0.4)
61  .margin({ top: 82, bottom: 40 })
62}
63
64@Entry
65@Component
66struct StepperExample {
67  @State currentIndex: number = 0
68  @State firstState: ItemState = ItemState.Normal
69  @State secondState: ItemState = ItemState.Normal
70  @State thirdState: ItemState = ItemState.Normal
71
72  build() {
73    Stepper({
74      index: this.currentIndex
75    }) {
76      // 第一个步骤页
77      StepperItem() {
78        Column() {
79          Text('Page One')
80            .itemTextStyle()
81          Button('change status:' + this.firstState)
82            .backgroundColor('#007dFF')
83            .onClick(() => {
84              this.firstState = this.firstState === ItemState.Skip ? ItemState.Normal : ItemState.Skip
85            })
86        }.itemStyle()
87      }
88      .nextLabel('Next')
89      .status(this.firstState)
90      // 第二个步骤页
91      StepperItem() {
92        Column() {
93          Text('Page Two')
94            .itemTextStyle()
95          Button('change status:' + this.secondState)
96            .backgroundColor('#007dFF')
97            .onClick(() => {
98              this.secondState = this.secondState === ItemState.Disabled ? ItemState.Normal : ItemState.Disabled
99            })
100        }.itemStyle()
101      }
102      .nextLabel('Next')
103      .prevLabel('Previous')
104      .status(this.secondState)
105      // 第三个步骤页
106      StepperItem() {
107        Column() {
108          Text('Page Three')
109            .itemTextStyle()
110          Button('change status:' + this.thirdState)
111            .backgroundColor('#007dFF')
112            .onClick(() => {
113              this.thirdState = this.thirdState === ItemState.Waiting ? ItemState.Normal : ItemState.Waiting
114            })
115        }.itemStyle()
116      }
117      .status(this.thirdState)
118      // 第四个步骤页
119      StepperItem() {
120        Column() {
121          Text('Page Four')
122            .itemTextStyle()
123        }.itemStyle()
124      }
125    }
126    .backgroundColor('#F1F3F5')
127    .onFinish(() => {
128      // 此处可处理点击最后一页的Finish时的逻辑,例如路由跳转等
129      console.info('onFinish')
130    })
131    .onSkip(() => {
132      // 此处可处理点击跳过时的逻辑,例如动态修改Stepper的index值使其跳转到某一步骤页等
133      console.info('onSkip')
134    })
135    .onChange((prevIndex: number, index: number) => {
136      this.currentIndex = index
137    })
138  }
139}
140```
141
142
143![stepper](figures/stepper.gif)
144
145