• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# LazyForEach
2
3> **说明**
4>
5> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
6
7开发者指南见:[LazyForEach开发者指南](../../../quick-start/arkts-rendering-control-lazyforeach.md)。
8
9## 接口
10
11LazyForEach(dataSource: IDataSource,itemGenerator: (item: any, index: number) => void,keyGenerator?: (item: any, index: number) => string,)
12
13LazyForEach从提供的数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。当在滚动容器中使用了LazyForEach,框架会根据滚动容器可视区域按需创建组件,当组件滑出可视区域外时,框架会进行组件销毁回收以降低内存占用。
14
15**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
16
17**系统能力:** SystemCapability.ArkUI.ArkUI.Full
18
19**参数:**
20
21| 参数名        | 类型                                                      | 必填 | 说明                                                         |
22| ------------- | --------------------------------------------------------- | ---- | ------------------------------------------------------------ |
23| dataSource    | [IDataSource](#idatasource10)                       | 是   | LazyForEach数据源,需要开发者实现相关接口。                  |
24| itemGenerator | (item:&nbsp;Object, index: number)&nbsp;=&gt;&nbsp;void   | 是   | 子组件生成函数,为数组中的每一个数据项创建一个子组件。<br/>**说明:**<br/>- item是当前数据项,index是数据项索引值。<br/>- itemGenerator的函数体必须使用大括号{...}。<br />- itemGenerator每次迭代只能并且必须生成一个子组件。<br />- itemGenerator中可以使用if语句,但是必须保证if语句每个分支都会创建一个相同类型的子组件。<br />- itemGenerator中不允许使用ForEach和LazyForEach语句。 |
25| keyGenerator  | (item:&nbsp;Object, index: number)&nbsp;=&gt;&nbsp;string | 否   | 键值生成函数,用于给数据源中的每一个数据项生成唯一且固定的键值。当数据项在数组中的位置更改时,其键值不得更改,当数组中的数据项被新项替换时,被替换项的键值和新项的键值必须不同。键值生成器的功能是可选的,但是,为了使开发框架能够更好地识别数组更改,提高性能,建议提供。如将数组反向时,如果没有提供键值生成器,则LazyForEach中的所有节点都将重建。<br/>**说明:**<br/>- item是当前数据项,index是数据项索引值。<br/>- 数据源中的每一个数据项生成的键值不能重复。 |
26
27## 属性
28
29继承自[DynamicNode](./ts-rendering-control-foreach.md#dynamicnode12)。
30
31## IDataSource<sup>10+</sup>
32
33**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
34
35**系统能力:** SystemCapability.ArkUI.ArkUI.Full
36
37### totalCount
38
39totalCount(): number
40
41获得数据总数。
42
43**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
44
45**系统能力:** SystemCapability.ArkUI.ArkUI.Full
46
47### getData
48
49getData(index:&nbsp;number): Object
50
51获取索引值index对应的数据。
52
53**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
54
55**系统能力:** SystemCapability.ArkUI.ArkUI.Full
56
57**参数:**
58
59| 参数名 | 类型   | 必填 | 说明                 |
60| ------ | ------ | ---- | -------------------- |
61| index  | number | 是   | 获取数据对应的索引值。 |
62
63### registerDataChangeListener
64
65registerDataChangeListener(listener: DataChangeListener): void
66
67注册数据改变的监听器。
68
69**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
70
71**系统能力:** SystemCapability.ArkUI.ArkUI.Full
72
73**参数:**
74
75| 参数名   | 类型                                        | 必填 | 说明           |
76| -------- | ------------------------------------------- | ---- | -------------- |
77| listener | [DataChangeListener](#datachangelistener10) | 是   | 数据变化监听器。 |
78
79### unregisterDataChangeListener
80
81unregisterDataChangeListener(listener: DataChangeListener): void
82
83注销数据改变的监听器。
84
85**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
86
87**系统能力:** SystemCapability.ArkUI.ArkUI.Full
88
89**参数:**
90
91| 参数名   | 类型                                        | 必填 | 说明           |
92| -------- | ------------------------------------------- | ---- | -------------- |
93| listener | [DataChangeListener](#datachangelistener10) | 是   | 数据变化监听器。 |
94
95## DataChangeListener<sup>10+</sup>
96
97数据变化监听器。
98
99> **说明:**
100>
101> DataChangeListener除onDatasetChange以外的方法中,当参数包含index且值为负数时,会默认用0来替换。onDatasetChange中,当单个DataOperation参数包含index且值在数据源索引范围之外(DataAddOperation中index可以等于数据源长度),则对应DataOperation不会生效。
102
103**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
104
105**系统能力:** SystemCapability.ArkUI.ArkUI.Full
106
107### onDataReloaded
108
109onDataReloaded(): void
110
111通知组件重新加载所有数据。键值没有变化的数据项会使用原先的子组件,键值发生变化的会重建子组件。重新加载数据完成后调用。
112
113**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
114
115**系统能力:** SystemCapability.ArkUI.ArkUI.Full
116
117### onDataAdded<sup>(deprecated)</sup>
118
119onDataAdded(index: number): void
120
121通知组件index的位置有数据添加。添加数据完成后调用。
122
123> 从API 8开始,建议使用[onDataAdd](#ondataadd8)。
124
125**系统能力:** SystemCapability.ArkUI.ArkUI.Full
126
127**参数:**
128
129| 参数名 | 类型   | 必填 | 说明                 |
130| ------ | ------ | ---- | -------------------- |
131| index  | number | 是   | 数据添加位置的索引值。 |
132
133### onDataMoved<sup>(deprecated)</sup>
134
135onDataMoved(from: number, to: number): void
136
137通知组件数据有移动。将from和to位置的数据进行交换。
138
139> 从API 8开始,建议使用[onDataMove](#ondatamove8)。
140
141> **说明:**
142>
143> 数据移动前后键值要保持不变,如果键值有变化,应使用删除数据和新增数据接口。数据移动起始位置与数据移动目标位置交换完成后调用。
144
145**系统能力:** SystemCapability.ArkUI.ArkUI.Full
146
147**参数:**
148
149| 参数名 | 类型   | 必填 | 说明             |
150| ------ | ------ | ---- | ---------------- |
151| from   | number | 是   | 数据移动起始位置。 |
152| to     | number | 是   | 数据移动目标位置。 |
153
154### onDataDeleted<sup>(deprecated)</sup>
155
156onDataDeleted(index: number): void
157
158通知组件删除index位置的数据并刷新LazyForEach的展示内容。删除数据完成后调用。
159
160> 从API 8开始,建议使用[onDataDelete](#ondatadelete8)。
161
162**系统能力:** SystemCapability.ArkUI.ArkUI.Full
163
164**参数:**
165
166| 参数名 | 类型   | 必填 | 说明                 |
167| ------ | ------ | ---- | -------------------- |
168| index  | number | 是   | 数据删除位置的索引值。 |
169
170### onDataChanged<sup>(deprecated)</sup>
171
172onDataChanged(index: number): void
173
174通知组件index的位置有数据有变化。改变数据完成后调用。
175
176> 从API 8开始,建议使用[onDataChange](#ondatachange8)。
177
178**系统能力:** SystemCapability.ArkUI.ArkUI.Full
179
180**参数:**
181
182| 参数名 | 类型   | 必填 | 说明           |
183| ------ | ------ | ---- | -------------- |
184| index  | number | 是   | 数据变化监听器。 |
185
186### onDataAdd<sup>8+</sup>
187
188onDataAdd(index: number): void
189
190通知组件index的位置有数据添加。添加数据完成后调用
191
192**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
193
194**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
195
196**系统能力:** SystemCapability.ArkUI.ArkUI.Full
197
198**参数:**
199
200| 参数名 | 类型   | 必填 | 说明           |
201| ------ | ------ | ---- | -------------- |
202| index  | number | 是   | 数据添加位置的索引值。 |
203
204### onDataMove<sup>8+</sup>
205
206onDataMove(from: number, to: number): void
207
208通知组件数据有移动。将from和to位置的数据进行交换。数据移动起始位置与数据移动目标位置交换完成后调用。
209
210> **说明:**
211>
212> 数据移动前后键值要保持不变,如果键值有变化,应使用删除数据和新增数据接口。
213
214**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
215
216**系统能力:** SystemCapability.ArkUI.ArkUI.Full
217
218**参数:**
219
220| 参数名 | 类型   | 必填 | 说明             |
221| ------ | ------ | ---- | ---------------- |
222| from   | number | 是   | 数据移动起始位置。 |
223| to     | number | 是   | 数据移动目标位置。 |
224
225### onDataDelete<sup>8+</sup>
226
227onDataDelete(index: number): void
228
229通知组件删除index位置的数据并刷新LazyForEach的展示内容。删除数据完成后调用。
230
231> **说明:**
232>
233> 需要保证dataSource中的对应数据已经在调用onDataDelete前删除,否则页面渲染将出现未定义的行为。
234
235**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
236
237**系统能力:** SystemCapability.ArkUI.ArkUI.Full
238
239**参数:**
240
241| 参数名 | 类型   | 必填 | 说明                 |
242| ------ | ------ | ---- | -------------------- |
243| index  | number | 是   | 数据删除位置的索引值。 |
244
245### onDataChange<sup>8+</sup>
246
247onDataChange(index: number): void
248
249通知组件index的位置有数据有变化。改变数据完成后调用。
250
251**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
252
253**系统能力:** SystemCapability.ArkUI.ArkUI.Full
254
255**参数:**
256
257| 参数名 | 类型   | 必填 | 说明                 |
258| ------ | ------ | ---- | -------------------- |
259| index  | number | 是   | 数据变化位置的索引值。 |
260
261### onDatasetChange<sup>12+</sup>
262
263onDatasetChange(dataOperations: DataOperation[]): void
264
265进行批量的数据处理后,调用onDatasetChange接口通知组件按照dataOperations刷新组件。
266
267> **说明:**
268>
269> onDatasetChange接口不能与其他DataChangeListener的更新接口混用。如在同一个LazyForEach中,调用过onDataAdd接口后,不能再调用onDatasetChange接口;反之,调用过onDatasetChange接口后,也不能调用onDataAdd等其他更新接口。页面中不同LazyForEach之间互不影响。
270
271**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
272
273**系统能力:** SystemCapability.ArkUI.ArkUI.Full
274
275**参数:**
276
277| 参数名         | 类型                | 必填 | 说明               |
278| -------------- | ------------------- | ---- | ------------------ |
279| dataOperations | [DataOperation](#dataoperation12)[] | 是   | 一次处理数据的操作。 |
280
281## DataOperation<sup>12+</sup>
282
283> **说明**
284>
285> 本模块首批接口从API version 12开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
286
287**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
288
289**系统能力:** SystemCapability.ArkUI.ArkUI.Full
290
291### DataAddOperation
292
293添加数据操作。
294
295**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
296
297**系统能力:** SystemCapability.ArkUI.ArkUI.Full
298
299**参数:**
300
301| 参数名 | 类型                      | 必填 | 说明                 |
302| ------ | ------------------------- | ---- | -------------------- |
303| type   | [DataOperationType](#dataoperationtype枚举说明).ADD     | 是   | 数据添加类型。         |
304| index  | number                    | 是   | 插入数据索引值。       |
305| count  | number                    | 否   | 插入数量,默认为1。   |
306| key    | string \| Array\<string\> | 否   | 为插入的数据分配键值。 |
307
308### DataDeleteOperation
309
310删除数据操作。
311
312**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
313
314**系统能力:** SystemCapability.ArkUI.ArkUI.Full
315
316**参数:**
317
318| 参数名 | 类型                      | 必填 | 说明                 |
319| ------ | ------------------------- | ---- | -------------------- |
320| type   | [DataOperationType](#dataoperationtype枚举说明).DELETE     | 是   | 数据删除类型。         |
321| index  | number                    | 是   | 起始删除位置索引值。       |
322| count  | number                    | 否   | 删除数据数量,默认为1。    |
323
324### DataChangeOperation
325
326改变数据操作。
327
328**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
329
330**系统能力:** SystemCapability.ArkUI.ArkUI.Full
331
332**参数:**
333
334| 参数名 | 类型                      | 必填 | 说明                 |
335| ------ | ------------------------- | ---- | -------------------- |
336| type   | [DataOperationType](#dataoperationtype枚举说明).CHANGE     | 是   | 数据改变类型。         |
337| index  | number                    | 是   | 改变的数据的索引值。       |
338| key  | string                    | 否   | 为改变的数据分配新的键值,默认使用原键值。    |
339
340### DataMoveOperation
341
342移动数据操作。
343
344**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
345
346**系统能力:** SystemCapability.ArkUI.ArkUI.Full
347
348**参数:**
349
350| 参数名 | 类型                      | 必填 | 说明                 |
351| ------ | ------------------------- | ---- | -------------------- |
352| type   | [DataOperationType](#dataoperationtype枚举说明).MOVE     | 是   | 数据移动类型。 |
353| index  | [MoveIndex](#moveindex)        | 是   | 移动位置。   |
354| key | string              | 否   | 为被移动的数据分配新的键值,默认使用原键值。 |
355
356#### MoveIndex
357
358**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
359
360**系统能力:** SystemCapability.ArkUI.ArkUI.Full
361
362**参数:**
363
364| 参数名 | 类型                       | 必填 | 说明            |
365| ------ | --------------- | ---- | ------- |
366| from   | number | 是   | 起始移动位置。                 |
367| to  | number           | 是   | 目的移动位置。           |
368
369### DataExchangeOperation
370
371交换数据操作。
372
373**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
374
375**系统能力:** SystemCapability.ArkUI.ArkUI.Full
376
377**参数:**
378
379| 参数名 | 类型                       | 必填 | 说明                         |
380| ------ | -------------------------- | ---- | ---------------------------- |
381| type   | [DataOperationType](#dataoperationtype枚举说明).EXCHANGE | 是   | 数据交换类型。                 |
382| index  | [ExchangeIndex](#exchangeindex)            | 是   | 交换位置。                     |
383| key    | [ExchangeKey](#exchangekey)              | 否   | 分配新的键值,默认使用原键值。 |
384
385#### ExchangeIndex
386
387**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
388
389**系统能力:** SystemCapability.ArkUI.ArkUI.Full
390
391**参数:**
392
393| 参数名 | 类型                       | 必填 | 说明            |
394| ------ | --------------- | ---- | ------- |
395| start   | number | 是   | 第一个交换位置。                 |
396| end  | number           | 是   | 第二个交换位置。           |
397
398#### ExchangeKey
399
400**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
401
402**系统能力:** SystemCapability.ArkUI.ArkUI.Full
403
404**参数:**
405
406| 参数名 | 类型                       | 必填 | 说明            |
407| ------ | --------------- | ---- | ------- |
408| start   | string | 是   | 为第一个交换的位置分配新的键值,默认使用原键值。        |
409| end  | string   | 是   | 为第二个交换的位置分配新的键值,默认使用原键值。           |
410
411### DataReloadOperation
412
413重载所有数据操作。当onDatasetChange含有DataOperationType.RELOAD操作时,其余操作全部失效,框架会自己调用keygenerator进行键值比对。
414
415**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
416
417**系统能力:** SystemCapability.ArkUI.ArkUI.Full
418
419**参数:**
420
421| 参数名 | 类型                     | 必填 | 说明             |
422| ------ | ------------------------ | ---- | ---------------- |
423| type   | [DataOperationType](#dataoperationtype枚举说明).RELOAD | 是   | 数据全部重载类型。 |
424
425### DataOperationType枚举说明
426
427枚举类型,数据操作说明。
428
429**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
430
431**系统能力:** SystemCapability.ArkUI.ArkUI.Full
432
433| 名称 | 值                    | 说明                 |
434| ------ | ------------------- | -------------------- |
435| ADD   |   add       | 数据添加。   |
436| DELETE  | delete    | 数据删除。    |
437| CHANGE  | change     | 数据改变。    |
438| MOVE | move | 数据移动。 |
439| EXCHANGE | exchange | 数据交换。 |
440| RELOAD | reload | 全部数据重载。 |