1# @ohos.arkui.observer (无感监听) 2 3<!--Kit: ArkUI--> 4<!--Subsystem: ArkUI--> 5<!--Owner: @piggyguy; @xiang-shouxing; @yangfan229--> 6<!--Designer: @piggyguy; @xiang-shouxing; @yangfan229--> 7<!--Tester: @fredyuan912--> 8<!--Adviser: @HelloCrease--> 9 10提供UI组件行为变化的无感监听能力。推荐使用[UIObserver](./arkts-apis-uicontext-uiobserver.md)进行组件监听。 11 12> **说明:** 13> 14> 从API Version 11开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 15> 16> UIObserver仅能监听到本进程内的相关信息,不支持获取<!--Del-->[UIExtensionComponent](../../reference/apis-arkui/arkui-ts/ts-container-ui-extension-component-sys.md)等<!--DelEnd-->跨进程场景的信息。 17 18 19## 导入模块 20 21```ts 22import { uiObserver } from '@kit.ArkUI'; 23``` 24 25## NavDestinationState 26 27NavDestination组件状态。 28 29**系统能力:** SystemCapability.ArkUI.ArkUI.Full 30 31| 名称 | 值 | 说明 | 32| --------- | --- | ------------------------ | 33| ON_SHOWN | 0 | NavDestination组件显示。**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 34| ON_HIDDEN | 1 | NavDestination组件隐藏。**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 35| ON_APPEAR<sup>12+</sup> | 2 | NavDestination从组件树上挂载。**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 36| ON_DISAPPEAR<sup>12+</sup> | 3 | NavDestination从组件树上卸载。**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 37| ON_WILL_SHOW<sup>12+</sup> | 4 | NavDestination组件显示之前。**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 38| ON_WILL_HIDE<sup>12+</sup> | 5 | NavDestination组件隐藏之前。**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 39| ON_WILL_APPEAR<sup>12+</sup>| 6 | NavDestination挂载到组件树之前。**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 40| ON_WILL_DISAPPEAR<sup>12+</sup>| 7 | NavDestination从组件树上卸载之前。**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 41| ON_ACTIVE<sup>17+</sup> | 8 | NavDestination组件处于激活态。**原子化服务API:** 从API version 17开始,该接口支持在原子化服务中使用。| 42| ON_INACTIVE<sup>17+</sup> | 9 | NavDestination组件处于非激活态。**原子化服务API:** 从API version 17开始,该接口支持在原子化服务中使用。| 43| ON_BACKPRESS<sup>12+</sup> | 100 | NavDestination组件返回。**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 44 45## ScrollEventType<sup>12+</sup> 46 47滚动事件的类型。 48 49**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 50 51**系统能力:** SystemCapability.ArkUI.ArkUI.Full 52 53| 名称 | 值 | 说明 | 54| --------- | --- | ------------------------ | 55| SCROLL_START | 0 | 滚动事件开始。 | 56| SCROLL_STOP | 1 | 滚动事件结束。 | 57 58## RouterPageState 59 60routerPage生命周期触发时对应的状态。 61 62**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 63 64**系统能力:** SystemCapability.ArkUI.ArkUI.Full 65 66| 名称 | 值 | 说明 | 67| ----------------- | --- | ----------------------- | 68| ABOUT_TO_APPEAR | 0 | page即将显示。 | 69| ABOUT_TO_DISAPPEAR | 1 | page即将销毁。 | 70| ON_PAGE_SHOW | 2 | page显示。 | 71| ON_PAGE_HIDE | 3 | page隐藏。 | 72| ON_BACK_PRESS | 4 | page返回时。 | 73 74## TabContentState<sup>12+</sup> 75 76TabContent组件的状态。 77 78**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 79 80**系统能力:** SystemCapability.ArkUI.ArkUI.Full 81 82| 名称 | 值 | 说明 | 83| ----------------- | --- | ----------------------- | 84| ON_SHOW | 0 | TabContent组件显示。 | 85| ON_HIDE | 1 | TabContent组件隐藏。 | 86 87## NavDestinationInfo 88 89NavDestination组件信息。 90 91**系统能力:** SystemCapability.ArkUI.ArkUI.Full 92 93| 名称 | 类型 | 只读 | 可选 | 说明 | 94| ------------ | ------------------------------------------------- | --- | -----|--------------------------------------------- | 95| navigationId | [ResourceStr](arkui-ts/ts-types.md#resourcestr) | 否 | 否 | 包含NavDestination组件的Navigation组件的id。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 96| name | [ResourceStr](arkui-ts/ts-types.md#resourcestr) | 否 | 否 | NavDestination组件的名称。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 97| state | [NavDestinationState](#navdestinationstate) | 否 | 否 | NavDestination组件的状态。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 98| index<sup>12+</sup> | number | 否 | 否 | NavDestination在页面栈中的索引。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。<br/> 取值范围:[0, +∞) | 99| param<sup>12+</sup> | Object | 否 | 是 | NavDestination组件的参数。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 100| navDestinationId<sup>12+</sup> | string | 否 | 否 | NavDestination组件的唯一标识ID。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 101| mode<sup>15+</sup> | [NavDestinationMode](arkui-ts/ts-basic-components-navdestination.md#navdestinationmode枚举说明11) | 否 | 是 | NavDestination类型。 <br/>**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。 | 102| uniqueId<sup>15+</sup> | number | 否 | 是 | NavDestination组件的uniqueId。 <br/>**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。 | 103 104## NavigationInfo<sup>12+</sup> 105 106Navigation组件信息。 107 108**系统能力:** SystemCapability.ArkUI.ArkUI.Full 109 110| 名称 | 类型 | 只读 | 可选 | 说明 | 111| ------------ | ---------------------------------------------| ----- | ---- | -------------------------------------------- | 112| navigationId | string | 否 | 否 | Navigation组件的id。<br/> **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 113| pathStack | [NavPathStack](arkui-ts/ts-basic-components-navigation.md#navpathstack10) | 否 | 否 | Navigation组件的导航控制器。<br/> **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 | 114| uniqueId<sup>20+</sup> | number | 否 | 是 | Navigation组件的uniqueId,可以通过[queryNavigationInfo](arkui-ts/ts-custom-component-api.md#querynavigationinfo12)获取。<br/> **原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。 | 115 116## ScrollEventInfo<sup>12+</sup> 117 118ScrollEvent滚动信息。 119 120 121**系统能力:** SystemCapability.ArkUI.ArkUI.Full 122 123| 名称 | 类型 | 只读 | 可选 | 说明 | 124| ------------ | -------------------------------------------------- | ---- | ---- | -------------------------------------------- | 125| id | string | 否 | 否 | 滚动组件的id。<br/> **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 126| uniqueId | number | 否 | 否 | 滚动组件的uniqueId。<br/> **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 127| scrollEvent | [ScrollEventType](#scrolleventtype12) | 否 | 否 | 滚动事件的类型。<br/> **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 128| offset | number | 否 | 否 | 滚动组件的当前偏移量。<br/> **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| 129| axis<sup>20+</sup> | [Axis](arkui-ts/ts-appendix-enums.md#axis) | 否 | 是 | 滚动组件的滚动方向。<br/> **原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。| 130 131## ObserverOptions<sup>12+</sup> 132 133Observer选项。 134 135**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 136 137**系统能力:** SystemCapability.ArkUI.ArkUI.Full 138 139| 名称 | 类型 | 只读 | 可选 | 说明 | 140| ------------ | -------------------------------------------------- | ---- | ---- | -------------------------------------------- | 141| id | string | 否 | 否 | 组件的id。 | 142 143## RouterPageInfo 144 145RouterPageInfo包含的信息。 146 147**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 148 149**系统能力:** SystemCapability.ArkUI.ArkUI.Full 150 151| 名称 | 类型 | 只读 | 可选 | 说明 | 152| -------------------- | -------------------------------------------------------| ----- | ---- | ---------------------------------------------- | 153| context | [UIAbilityContext](../apis-ability-kit/js-apis-inner-application-uiAbilityContext.md) \| [UIContext](./arkts-apis-uicontext-uicontext.md) | 否 | 否 | 触发生命周期的routerPage页面对应的上下文信息。 | 154| index | number | 否 | 否 | 触发生命周期的routerPage在栈中的位置。<br/> 取值范围:[0, +∞) | 155| name | string | 否 | 否 | 触发生命周期的routerPage页面的名称。 | 156| path | string | 否 | 否 | 触发生命周期的routerPage页面的路径。 | 157| state | [RouterPageState](#routerpagestate) | 否 | 否 | 触发生命周期的routerPage页面的状态。 | 158| pageId<sup>12+</sup> | string | 否 | 否 | 触发生命周期的routerPage页面的唯一标识。 | 159 160## DensityInfo<sup>12+</sup> 161 162屏幕像素密度变化回调包含的信息。 163 164**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 165 166**系统能力:** SystemCapability.ArkUI.ArkUI.Full 167 168| 名称 | 类型 | 只读 | 可选 | 说明 | 169| ------- | ----------------------------------------- | ---- | ---- | -------------------------------------- | 170| context | [UIContext](./arkts-apis-uicontext-uicontext.md) | 否 | 否 | 屏幕像素密度变化时页面对应的上下文信息。 | 171| density | number | 否 | 否 | 变化后的屏幕像素密度。<br/>取值范围:[0, +∞) | 172 173## NavDestinationSwitchInfo<sup>12+</sup> 174 175Navigation组件页面切换的信息。 176 177**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 178 179**系统能力:** SystemCapability.ArkUI.ArkUI.Full 180 181| 名称 | 类型 | 只读 | 可选 | 说明 | 182| ------------ | -------------------------------------------- | ------ | ---- | -------------------------------------------- | 183| context | [UIAbilityContext](../apis-ability-kit/js-apis-inner-application-uiAbilityContext.md) \| [UIContext](./arkts-apis-uicontext-uicontext.md) | 否 | 否 | 触发页面切换的Navigation对应的上下文信息。 | 184| from | [NavDestinationInfo](#navdestinationinfo) \| [NavBar](./arkui-ts/ts-basic-components-navigation.md#navbar12) | 否 | 否 | 页面切换的源页面。 | 185| to | [NavDestinationInfo](#navdestinationinfo) \| [NavBar](./arkui-ts/ts-basic-components-navigation.md#navbar12) | 否 | 否 | 页面切换的目的页面。 | 186| operation | [NavigationOperation](./arkui-ts/ts-basic-components-navigation.md#navigationoperation11枚举说明) | 否 | 否 | 页面切换操作类型。 | 187 188## NavDestinationSwitchObserverOptions<sup>12+</sup> 189 190Navigation组件页面切换事件的监听选项。 191 192**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 193 194**系统能力:** SystemCapability.ArkUI.ArkUI.Full 195 196| 名称 | 类型 | 只读 | 可选 | 说明 | 197| ------------ | --------------------------------------------- | ----- | ---- | -------------------------------------------- | 198| navigationId | [ResourceStr](arkui-ts/ts-types.md#resourcestr) | 否 | 是 | 指定需要监听的Navigation的ID | 199 200## TabContentInfo<sup>12+</sup> 201 202TabContent页面的切换信息。 203 204**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 205 206**系统能力:** SystemCapability.ArkUI.ArkUI.Full 207 208| 名称 | 类型 | 只读 | 可选 | 说明 | 209| ------------ | -------------------------------------------- | ---- | ---- | -------------------------------------------- | 210| tabContentId | string | 否 | 否 | TabContent组件的id。 | 211| tabContentUniqueId | number | 否 | 否 | TabContent组件的uniqueId。 | 212| state | [TabContentState](#tabcontentstate12) | 否 | 否 | TabContent组件的状态。 | 213| index | number | 否 | 否 | TabContent组件的下标索引。索引从0开始。 | 214| id | string | 否 | 否 | Tabs组件的id。 | 215| uniqueId | number | 否 | 否 | Tabs组件的uniqueId。 | 216 217## uiObserver.on('navDestinationUpdate') 218 219on(type: 'navDestinationUpdate', callback: Callback\<NavDestinationInfo\>): void 220 221监听NavDestination组件的状态变化。 222 223**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 224 225**系统能力:** SystemCapability.ArkUI.ArkUI.Full 226 227**参数:** 228 229| 参数名 | 类型 | 必填 | 说明 | 230| -------- | ----------------------------------------------------- | ---- | ------------------------------------------------------------------------ | 231| type | string | 是 | 监听事件,固定为'navDestinationUpdate',即NavDestination组件的状态变化。 | 232| callback | Callback\<[NavDestinationInfo](#navdestinationinfo)\> | 是 | 回调函数。返回当前的NavDestination组件状态。 | 233 234**示例:** 235 236```ts 237// Index.ets 238// 演示 uiObserver.on('navDestinationUpdate', callback) 239// uiObserver.off('navDestinationUpdate', callback) 240import { uiObserver } from '@kit.ArkUI'; 241 242@Component 243struct PageOne { 244 build() { 245 NavDestination() { 246 Text("pageOne") 247 }.title("pageOne") 248 } 249} 250 251@Entry 252@Component 253struct Index { 254 private stack: NavPathStack = new NavPathStack(); 255 256 @Builder 257 PageBuilder(name: string) { 258 PageOne() 259 } 260 261 aboutToAppear() { 262 uiObserver.on('navDestinationUpdate', (info) => { 263 console.info(`NavDestination state update ${JSON.stringify(info)}`); 264 }); 265 } 266 267 aboutToDisappear() { 268 uiObserver.off('navDestinationUpdate'); 269 } 270 271 build() { 272 Column() { 273 Navigation(this.stack) { 274 Button("push").onClick(() => { 275 this.stack.pushPath({ name: "pageOne" }); 276 }) 277 } 278 .title("Navigation") 279 .navDestination(this.PageBuilder) 280 } 281 .width('100%') 282 .height('100%') 283 } 284} 285``` 286 287## uiObserver.off('navDestinationUpdate') 288 289off(type: 'navDestinationUpdate', callback?: Callback\<NavDestinationInfo\>): void 290 291取消监听NavDestination组件的状态变化。 292 293**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 294 295**系统能力:** SystemCapability.ArkUI.ArkUI.Full 296 297**参数:** 298 299| 参数名 | 类型 | 必填 | 说明 | 300| -------- | ----------------------------------------------------- | ---- | ------------------------------------------------------------------------ | 301| type | string | 是 | 监听事件,固定为'navDestinationUpdate',即NavDestination组件的状态变化。 | 302| callback | Callback\<[NavDestinationInfo](#navdestinationinfo)\> | 否 | 回调函数。返回当前的NavDestination组件状态。 | 303 304**示例:** 305 306参考[uiObserver.on('navDestinationUpdate')](#uiobserveronnavdestinationupdate)示例。 307 308## uiObserver.on('navDestinationUpdate') 309 310on(type: 'navDestinationUpdate', options: { navigationId: ResourceStr }, callback: Callback\<NavDestinationInfo\>): void 311 312监听NavDestination组件的状态变化。 313 314**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 315 316**系统能力:** SystemCapability.ArkUI.ArkUI.Full 317 318**参数:** 319 320| 参数名 | 类型 | 必填 | 说明 | 321| -------- | -------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------ | 322| type | string | 是 | 监听事件,固定为'navDestinationUpdate',即NavDestination组件的状态变化。 | 323| options | { navigationId: [ResourceStr](arkui-ts/ts-types.md#resourcestr) } | 是 | 指定监听的Navigation的id。 | 324| callback | Callback\<[NavDestinationInfo](#navdestinationinfo)\> | 是 | 回调函数。返回当前的NavDestination组件状态。 | 325 326**示例:** 327 328```ts 329// Index.ets 330// 演示 uiObserver.on('navDestinationUpdate', navigationId, callback) 331// uiObserver.off('navDestinationUpdate', navigationId, callback) 332import { uiObserver } from '@kit.ArkUI'; 333 334@Component 335struct PageOne { 336 build() { 337 NavDestination() { 338 Text("pageOne") 339 }.title("pageOne") 340 } 341} 342 343@Entry 344@Component 345struct Index { 346 private stack: NavPathStack = new NavPathStack(); 347 348 @Builder 349 PageBuilder(name: string) { 350 PageOne() 351 } 352 353 aboutToAppear() { 354 uiObserver.on('navDestinationUpdate', { navigationId: "testId" }, (info) => { 355 console.info(`NavDestination state update ${JSON.stringify(info)}`); 356 }); 357 } 358 359 aboutToDisappear() { 360 uiObserver.off('navDestinationUpdate', { navigationId: "testId" }); 361 } 362 363 build() { 364 Column() { 365 Navigation(this.stack) { 366 Button("push").onClick(() => { 367 this.stack.pushPath({ name: "pageOne" }); 368 }) 369 } 370 .id("testId") 371 .title("Navigation") 372 .navDestination(this.PageBuilder) 373 } 374 .width('100%') 375 .height('100%') 376 } 377} 378``` 379 380## uiObserver.off('navDestinationUpdate') 381 382off(type: 'navDestinationUpdate', options: { navigationId: ResourceStr }, callback?: Callback\<NavDestinationInfo\>): void 383 384取消监听NavDestination组件的状态变化。 385 386**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 387 388**系统能力:** SystemCapability.ArkUI.ArkUI.Full 389 390**参数:** 391 392| 参数名 | 类型 | 必填 | 说明 | 393| -------- | -------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------ | 394| type | string | 是 | 监听事件,固定为'navDestinationUpdate',即NavDestination组件的状态变化。 | 395| options | { navigationId: [ResourceStr](arkui-ts/ts-types.md#resourcestr) } | 是 | 指定监听的Navigation的id。 | 396| callback | Callback\<[NavDestinationInfo](#navdestinationinfo)\> | 否 | 回调函数。返回当前的NavDestination组件状态。 | 397 398**示例:** 399 400参考[uiObserver.on('navDestinationUpdate')](#uiobserveronnavdestinationupdate-1)示例。 401 402## uiObserver.on('scrollEvent')<sup>12+</sup> 403 404on(type: 'scrollEvent', callback: Callback\<ScrollEventInfo\>): void 405 406监听所有滚动组件滚动事件的开始和结束。滚动组件包括[List](./arkui-ts/ts-container-list.md)、[Grid](./arkui-ts/ts-container-grid.md)、[Scroll](./arkui-ts/ts-container-scroll.md)、[WaterFlow](./arkui-ts/ts-container-waterflow.md)、[ArcList](./arkui-ts/ts-container-arclist.md)。 407 408**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 409 410**系统能力:** SystemCapability.ArkUI.ArkUI.Full 411 412**参数:** 413 414| 参数名 | 类型 | 必填 | 说明 | 415| -------- | ----------------------------------------------------- | ---- | ------------------------------------------------------------------------ | 416| type | string | 是 | 监听事件,固定为'scrollEvent',即滚动事件的开始和结束。 | 417| callback | Callback\<[ScrollEventInfo](#scrolleventinfo12)\> | 是 | 回调函数。返回滚动事件的信息。 | 418 419**示例:** 420 421参考[uiObserver.off('scrollEvent')](#uiobserveroffscrollevent12-1)示例。 422 423## uiObserver.off('scrollEvent')<sup>12+</sup> 424 425off(type: 'scrollEvent', callback?: Callback\<ScrollEventInfo\>): void 426 427取消监听所有滚动组件滚动事件的开始和结束。滚动组件包括[List](./arkui-ts/ts-container-list.md)、[Grid](./arkui-ts/ts-container-grid.md)、[Scroll](./arkui-ts/ts-container-scroll.md)、[WaterFlow](./arkui-ts/ts-container-waterflow.md)、[ArcList](./arkui-ts/ts-container-arclist.md)。 428 429**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 430 431**系统能力:** SystemCapability.ArkUI.ArkUI.Full 432 433**参数:** 434 435| 参数名 | 类型 | 必填 | 说明 | 436| -------- | ----------------------------------------------------- | ---- | ------------------------------------------------------------------------ | 437| type | string | 是 | 监听事件,固定为'scrollEvent',即滚动事件的开始和结束。 | 438| callback | Callback\<[ScrollEventInfo](#scrolleventinfo12)\> | 否 | 回调函数。返回滚动事件的信息。 | 439 440**示例:** 441 442参考[uiObserver.off('scrollEvent')](#uiobserveroffscrollevent12-1)示例。 443 444## uiObserver.on('scrollEvent')<sup>12+</sup> 445 446on(type: 'scrollEvent', options: ObserverOptions, callback: Callback\<ScrollEventInfo\>): void 447 448监听指定id的滚动组件滚动事件的开始和结束。滚动组件包括[List](./arkui-ts/ts-container-list.md)、[Grid](./arkui-ts/ts-container-grid.md)、[Scroll](./arkui-ts/ts-container-scroll.md)、[WaterFlow](./arkui-ts/ts-container-waterflow.md)、[ArcList](./arkui-ts/ts-container-arclist.md)。 449 450**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 451 452**系统能力:** SystemCapability.ArkUI.ArkUI.Full 453 454**参数:** 455 456| 参数名 | 类型 | 必填 | 说明 | 457| -------- | -------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------ | 458| type | string | 是 | 监听事件,固定为'scrollEvent',即滚动事件的开始和结束。 | 459| options | [ObserverOptions](#observeroptions12) | 是 | 指定监听的滚动组件的id。 | 460| callback | Callback\<[ScrollEventInfo](#scrolleventinfo12)\> | 是 | 回调函数。返回滚动事件的信息。 | 461 462**示例:** 463 464参考[uiObserver.off('scrollEvent')](#uiobserveroffscrollevent12-1)示例。 465 466## uiObserver.off('scrollEvent')<sup>12+</sup> 467 468off(type: 'scrollEvent', options: ObserverOptions, callback?: Callback\<ScrollEventInfo\>): void 469 470取消监听指定id的滚动组件滚动事件的开始和结束。滚动组件包括[List](./arkui-ts/ts-container-list.md)、[Grid](./arkui-ts/ts-container-grid.md)、[Scroll](./arkui-ts/ts-container-scroll.md)、[WaterFlow](./arkui-ts/ts-container-waterflow.md)、[ArcList](./arkui-ts/ts-container-arclist.md)。 471 472**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 473 474**系统能力:** SystemCapability.ArkUI.ArkUI.Full 475 476**参数:** 477 478| 参数名 | 类型 | 必填 | 说明 | 479| -------- | -------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------ | 480| type | string | 是 | 监听事件,固定为'scrollEvent',即滚动事件的开始和结束。 | 481| options | [ObserverOptions](#observeroptions12) | 是 | 指定监听的滚动组件的id。 | 482| callback | Callback\<[ScrollEventInfo](#scrolleventinfo12)\> | 否 | 回调函数。返回滚动事件的信息。 | 483 484**示例:** 485 486```ts 487import { uiObserver } from '@kit.ArkUI' 488 489@Entry 490@Component 491struct Index { 492 scroller: Scroller = new Scroller(); 493 options: uiObserver.ObserverOptions = { id: 'testId' }; 494 private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7] 495 496 build() { 497 Column() { 498 Column() { 499 Scroll(this.scroller) { 500 Column() { 501 ForEach(this.arr, (item: number) => { 502 Text(item.toString()) 503 .width('90%') 504 .height(150) 505 .backgroundColor(0xFFFFFF) 506 .borderRadius(15) 507 .fontSize(16) 508 .textAlign(TextAlign.Center) 509 .margin({ top: 10 }) 510 }, (item: string) => item) 511 }.width('100%') 512 } 513 .id('testId') 514 .height('80%') 515 } 516 .width('100%') 517 518 Row() { 519 Button('UIObserver on') 520 .onClick(() => { 521 uiObserver.on('scrollEvent', (info) => { 522 console.info(`scrollEventInfo ${JSON.stringify(info)}`); 523 }); 524 }) 525 Button('UIObserver off') 526 .onClick(() => { 527 uiObserver.off('scrollEvent'); 528 }) 529 } 530 531 Row() { 532 Button('UIObserverWithId on') 533 .onClick(() => { 534 uiObserver.on('scrollEvent', this.options, (info) => { 535 console.info(`scrollEventInfo ${JSON.stringify(info)}`); 536 }); 537 }) 538 Button('UIObserverWithId off') 539 .onClick(() => { 540 uiObserver.off('scrollEvent',this.options); 541 }) 542 } 543 } 544 .height('100%') 545 } 546} 547``` 548 549## uiObserver.on('routerPageUpdate')<sup>11+</sup> 550 551on(type: 'routerPageUpdate', context: UIAbilityContext | UIContext, callback: Callback\<RouterPageInfo\>): void 552 553监听router中page页面的状态变化。 554 555**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 556 557**系统能力:** SystemCapability.ArkUI.ArkUI.Full 558 559**参数:** 560 561| 参数名 | 类型 | 必填 | 说明 | 562| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 563| type | string | 是 | 监听事件,固定为'routerPageUpdate',即router中page页面的状态变化。 | 564| context | [UIAbilityContext](../apis-ability-kit/js-apis-inner-application-uiAbilityContext.md) \| [UIContext](./arkts-apis-uicontext-uicontext.md) | 是 | 上下文信息,用以指定监听页面的范围。 | 565| callback | Callback\<[RouterPageInfo](#routerpageinfo)\> | 是 | 回调函数。携带pageInfo,返回当前的page页面状态。 | 566 567**示例:** 568 569```ts 570// used in UIAbility 571import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 572import { UIContext, window, uiObserver } from '@kit.ArkUI'; 573import { BusinessError } from '@kit.BasicServicesKit'; 574 575export default class EntryAbility extends UIAbility { 576 private uiContext: UIContext | null = null; 577 578 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { 579 // 注册监听,范围是abilityContext内的page 580 uiObserver.on('routerPageUpdate', this.context, (info: uiObserver.RouterPageInfo) => { 581 console.info(`[uiObserver][abilityContext] got info: ${JSON.stringify(info)}`) 582 }) 583 } 584 585 onWindowStageCreate(windowStage: window.WindowStage): void { 586 windowStage.loadContent('pages/Index', (err) => { 587 windowStage.getMainWindow((err: BusinessError, data) => { 588 let windowInfo: window.Window = data; 589 // 获取UIContext实例 590 this.uiContext = windowInfo.getUIContext(); 591 // 注册监听,范围是uiContext内的page 592 uiObserver.on('routerPageUpdate', this.uiContext, (info: uiObserver.RouterPageInfo)=>{ 593 console.info(`[uiObserver][uiContext] got info: ${JSON.stringify(info)}`) 594 }) 595 }) 596 }); 597 } 598 599 // ... other function in EntryAbility 600} 601``` 602 603## uiObserver.off('routerPageUpdate')<sup>11+</sup> 604 605off(type: 'routerPageUpdate', context: UIAbilityContext | UIContext, callback?: Callback\<RouterPageInfo\>): void 606 607取消监听router中page页面的状态变化。 608 609**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 610 611**系统能力:** SystemCapability.ArkUI.ArkUI.Full 612 613**参数:** 614 615| 参数名 | 类型 | 必填 | 说明 | 616| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 617| type | string | 是 | 监听事件,固定为'routerPageUpdate',即router中page页面的状态变化。 | 618| context | [UIAbilityContext](../apis-ability-kit/js-apis-inner-application-uiAbilityContext.md) \| [UIContext](./arkts-apis-uicontext-uicontext.md) | 是 | 上下文信息,用以指定监听页面的范围。 | 619| callback | Callback\<[RouterPageInfo](#routerpageinfo)\> | 否 | 需要被注销的回调函数。 | 620 621**示例:** 622 623```ts 624// used in UIAbility 625import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 626import { uiObserver, UIContext } from '@kit.ArkUI'; 627 628export default class EntryAbility extends UIAbility { 629 // 实际使用前uiContext需要被赋值。参见示例uiObserver.on('routerPageUpdate') 630 private uiContext: UIContext | null = null; 631 632 onDestroy(): void { 633 // 注销当前abilityContext上的所有routerPageUpdate监听 634 uiObserver.off('routerPageUpdate', this.context) 635 } 636 637 onWindowStageDestroy(): void { 638 // 注销在uiContext上的所有routerPageUpdate监听 639 if (this.uiContext) { 640 uiObserver.off('routerPageUpdate', this.uiContext); 641 } 642 } 643 644 // ... other function in EntryAbility 645} 646``` 647 648## uiObserver.on('densityUpdate')<sup>12+</sup> 649 650on(type: 'densityUpdate', context: UIContext, callback: Callback\<DensityInfo\>): void 651 652监听屏幕像素密度变化。 653 654**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 655 656**系统能力:** SystemCapability.ArkUI.ArkUI.Full 657 658**参数:** 659 660| 参数名 | 类型 | 必填 | 说明 | 661| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 662| type | string | 是 | 监听事件,固定为'densityUpdate',即屏幕像素密度变化。 | 663| context | [UIContext](./arkts-apis-uicontext-uicontext.md) | 是 | 上下文信息,用以指定监听页面的范围。 | 664| callback | Callback\<[DensityInfo](#densityinfo12)\> | 是 | 回调函数。携带densityInfo,返回变化后的屏幕像素密度。 | 665 666**示例:** 667 668```ts 669import { uiObserver } from '@kit.ArkUI'; 670 671@Entry 672@Component 673struct Index { 674 @State density: number = 0; 675 @State message: string = '未注册监听'; 676 677 densityUpdateCallback = (info: uiObserver.DensityInfo) => { 678 this.density = info.density; 679 this.message = '变化后的DPI:' + this.density.toString(); 680 } 681 682 build() { 683 Column() { 684 Text(this.message) 685 .fontSize(24) 686 .fontWeight(FontWeight.Bold) 687 Button('注册屏幕像素密度变化监听') 688 .onClick(() => { 689 this.message = '已注册监听' 690 uiObserver.on('densityUpdate', this.getUIContext(), this.densityUpdateCallback); 691 }) 692 } 693 } 694} 695``` 696 697## uiObserver.off('densityUpdate')<sup>12+</sup> 698 699off(type: 'densityUpdate', context: UIContext, callback?: Callback\<DensityInfo\>): void 700 701取消监听屏幕像素密度的变化。 702 703**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 704 705**系统能力:** SystemCapability.ArkUI.ArkUI.Full 706 707**参数:** 708 709| 参数名 | 类型 | 必填 | 说明 | 710| -------- | ----------------------------------------- | ---- | ---------------------------------------------------------------------------------------------- | 711| type | string | 是 | 监听事件,固定为'densityUpdate',即屏幕像素密度变化。 | 712| context | [UIContext](./arkts-apis-uicontext-uicontext.md) | 是 | 上下文信息,用以指定监听页面的范围。 | 713| callback | Callback\<[DensityInfo](#densityinfo12)\> | 否 | 需要被注销的回调函数。若不指定具体的回调函数,则注销指定UIContext下所有densityUpdate事件监听。 | 714 715```ts 716import { uiObserver, UIContext } from '@kit.ArkUI'; 717 718@Entry 719@Component 720struct Index { 721 @State density: number = 0; 722 @State message: string = '未注册监听' 723 724 densityUpdateCallback = (info: uiObserver.DensityInfo) => { 725 this.density = info.density; 726 this.message = '变化后的DPI:' + this.density.toString(); 727 } 728 729 build() { 730 Column() { 731 Text(this.message) 732 .fontSize(24) 733 .fontWeight(FontWeight.Bold) 734 Button('注册屏幕像素密度变化监听') 735 .margin({ bottom: 10 }) 736 .onClick(() => { 737 this.message = '已注册监听' 738 uiObserver.on('densityUpdate', this.getUIContext(), this.densityUpdateCallback); 739 }) 740 Button('解除注册屏幕像素密度变化监听') 741 .onClick(() => { 742 this.message = '未注册监听' 743 uiObserver.off('densityUpdate', this.getUIContext(), this.densityUpdateCallback); 744 }) 745 } 746 } 747} 748``` 749 750## uiObserver.on('willDraw')<sup>12+</sup> 751 752on(type: 'willDraw', context: UIContext, callback: Callback\<void\>): void 753 754监听每一帧绘制指令下发情况。 755 756**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 757 758**系统能力:** SystemCapability.ArkUI.ArkUI.Full 759 760**参数:** 761 762| 参数名 | 类型 | 必填 | 说明 | 763| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 764| type | string | 是 | 监听事件,固定为'willDraw',即是否将要绘制。 | 765| context | [UIContext](./arkts-apis-uicontext-uicontext.md) | 是 | 上下文信息,用以指定监听页面的范围。 | 766| callback | Callback\<void\> | 是 | 回调函数。 | 767 768**示例:** 769 770```ts 771import { uiObserver } from '@kit.ArkUI'; 772 773@Entry 774@Component 775struct Index { 776 willDrawCallback = () => { 777 console.info("willDraw指令下发"); 778 } 779 build() { 780 Column() { 781 Button('注册绘制指令下发监听') 782 .onClick(() => { 783 uiObserver.on('willDraw', this.getUIContext(), this.willDrawCallback); 784 }) 785 } 786 } 787} 788``` 789 790## uiObserver.off('willDraw')<sup>12+</sup> 791 792off(type: 'willDraw', context: UIContext, callback?: Callback\<void\>): void 793 794取消监听每一帧绘制指令下发情况。 795 796**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 797 798**系统能力:** SystemCapability.ArkUI.ArkUI.Full 799 800**参数:** 801 802| 参数名 | 类型 | 必填 | 说明 | 803| -------- | ----------------------------------------- | ---- | ----------------------------------------------------- | 804| type | string | 是 | 监听事件,固定为'willDraw',即是否将要绘制。 | 805| context | [UIContext](./arkts-apis-uicontext-uicontext.md) | 是 | 上下文信息,用以指定监听页面的范围。 | 806| callback | Callback\<void\> | 否 | 需要被注销的回调函数。 | 807 808```ts 809import { uiObserver } from '@kit.ArkUI'; 810 811@Entry 812@Component 813struct Index { 814 willDrawCallback = () => { 815 console.info("willDraw指令下发") 816 } 817 818 build() { 819 Column() { 820 Button('注册绘制指令下发监听') 821 .margin({ bottom: 10 }) 822 .onClick(() => { 823 uiObserver.on('willDraw', this.getUIContext(), this.willDrawCallback); 824 }) 825 Button('解除注册绘制指令下发监听') 826 .onClick(() => { 827 uiObserver.off('willDraw', this.getUIContext(), this.willDrawCallback); 828 }) 829 } 830 } 831} 832``` 833 834## uiObserver.on('didLayout')<sup>12+</sup> 835 836on(type: 'didLayout', context: UIContext, callback: Callback\<void\>): void 837 838监听每一帧布局完成情况。 839 840**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 841 842**系统能力:** SystemCapability.ArkUI.ArkUI.Full 843 844**参数:** 845 846| 参数名 | 类型 | 必填 | 说明 | 847| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 848| type | string | 是 | 监听事件,固定为'didLayout',即是否布局完成。 | 849| context | [UIContext](./arkts-apis-uicontext-uicontext.md) | 是 | 上下文信息,用以指定监听页面的范围。 | 850| callback | Callback\<void\> | 是 | 回调函数。 | 851 852**示例:** 853 854```ts 855import { uiObserver } from '@kit.ArkUI'; 856 857@Entry 858@Component 859struct Index { 860 didLayoutCallback = () => { 861 console.info("Layout布局完成"); 862 } 863 build() { 864 Column() { 865 Button('注册布局完成监听') 866 .onClick(() => { 867 uiObserver.on('didLayout', this.getUIContext(), this.didLayoutCallback); 868 }) 869 } 870 } 871} 872``` 873 874## uiObserver.off('didLayout')<sup>12+</sup> 875 876off(type: 'didLayout', context: UIContext, callback?: Callback\<void\>): void 877 878取消监听每一帧布局完成情况。 879 880**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 881 882**系统能力:** SystemCapability.ArkUI.ArkUI.Full 883 884**参数:** 885 886| 参数名 | 类型 | 必填 | 说明 | 887| -------- | ----------------------------------------- | ---- | ----------------------------------------------------- | 888| type | string | 是 | 监听事件,固定为'didLayout',即是否布局完成。 | 889| context | [UIContext](./arkts-apis-uicontext-uicontext.md) | 是 | 上下文信息,用以指定监听页面的范围。 | 890| callback | Callback\<void\> | 否 | 需要被注销的回调函数。 | 891 892```ts 893import { uiObserver } from '@kit.ArkUI'; 894 895@Entry 896@Component 897struct Index { 898 didLayoutCallback = () => { 899 console.info("Layout布局完成") 900 } 901 902 build() { 903 Column() { 904 Button('注册布局完成监听') 905 .margin({ bottom: 10 }) 906 .onClick(() => { 907 uiObserver.on('didLayout', this.getUIContext(), this.didLayoutCallback); 908 }) 909 Button('解除布局完成监听') 910 .onClick(() => { 911 uiObserver.off('didLayout', this.getUIContext(), this.didLayoutCallback); 912 }) 913 } 914 } 915} 916``` 917 918## uiObserver.on('navDestinationSwitch')<sup>12+</sup> 919 920on(type: 'navDestinationSwitch', context: UIAbilityContext | UIContext, callback: Callback\<NavDestinationSwitchInfo\>): void 921 922监听Navigation的页面切换事件。 923 924**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 925 926**系统能力:** SystemCapability.ArkUI.ArkUI.Full 927 928**参数:** 929 930| 参数名 | 类型 | 必填 | 说明 | 931| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 932| type | string | 是 | 监听事件,固定为'navDestinationSwitch',即Navigation的页面切换事件。 | 933| context | [UIAbilityContext](../apis-ability-kit/js-apis-inner-application-uiAbilityContext.md) \| [UIContext](./arkts-apis-uicontext-uicontext.md) | 是 | 上下文信息,用以指定监听页面切换事件的范围。 | 934| callback | Callback\<[NavDestinationSwitchInfo](#navdestinationswitchinfo12)\> | 是 | 回调函数。携带NavDestinationSwitchInfo,返回页面切换事件的信息。 | 935 936**示例:** 937 938```ts 939// EntryAbility.ets 940// 演示 uiObserver.on('navDestinationSwitch', UIAbilityContext, callback) 941// uiObserver.off('navDestinationSwitch', UIAbilityContext, callback) 942import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 943import { uiObserver, window } from '@kit.ArkUI'; 944import { hilog } from "@kit.PerformanceAnalysisKit"; 945 946function callbackFunc(info: uiObserver.NavDestinationSwitchInfo) { 947 console.info(`testTag navDestinationSwitch from: ${JSON.stringify(info.from)} to: ${JSON.stringify(info.to)}`) 948} 949 950export default class EntryAbility extends UIAbility { 951 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { 952 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); 953 uiObserver.on('navDestinationSwitch', this.context, callbackFunc); 954 } 955 956 onDestroy(): void { 957 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); 958 uiObserver.off('navDestinationSwitch', this.context, callbackFunc); 959 } 960 961 onWindowStageCreate(windowStage: window.WindowStage): void { 962 // Main window is created, set main page for this ability 963 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); 964 965 windowStage.loadContent('pages/Index', (err, data) => { 966 if (err.code) { 967 hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); 968 return; 969 } 970 hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); 971 }); 972 } 973 974 onWindowStageDestroy(): void { 975 // Main window is destroyed, release UI related resources 976 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); 977 } 978 979 onForeground(): void { 980 // Ability has brought to foreground 981 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); 982 } 983 984 onBackground(): void { 985 // Ability has back to background 986 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); 987 } 988} 989``` 990 991```ts 992// Index.ets 993// 演示 uiObserver.on('navDestinationSwitch', UIContext, callback) 994// uiObserver.off('navDestinationSwitch', UIContext, callback) 995import { uiObserver } from '@kit.ArkUI'; 996 997@Component 998struct PageOne { 999 build() { 1000 NavDestination() { 1001 Text("pageOne") 1002 }.title("pageOne") 1003 } 1004} 1005 1006function callbackFunc(info: uiObserver.NavDestinationSwitchInfo) { 1007 console.info(`testTag navDestinationSwitch from: ${JSON.stringify(info.from)} to: ${JSON.stringify(info.to)}`) 1008} 1009 1010@Entry 1011@Component 1012struct Index { 1013 private stack: NavPathStack = new NavPathStack(); 1014 1015 @Builder 1016 PageBuilder(name: string) { 1017 PageOne() 1018 } 1019 1020 aboutToAppear() { 1021 uiObserver.on('navDestinationSwitch', this.getUIContext(), callbackFunc) 1022 } 1023 1024 aboutToDisappear() { 1025 uiObserver.off('navDestinationSwitch', this.getUIContext(), callbackFunc) 1026 } 1027 1028 build() { 1029 Column() { 1030 Navigation(this.stack) { 1031 Button("push").onClick(() => { 1032 this.stack.pushPath({ name: "pageOne" }); 1033 }) 1034 } 1035 .title("Navigation") 1036 .navDestination(this.PageBuilder) 1037 } 1038 .width('100%') 1039 .height('100%') 1040 } 1041} 1042``` 1043 1044## uiObserver.off('navDestinationSwitch')<sup>12+</sup> 1045 1046off(type: 'navDestinationSwitch', context: UIAbilityContext | UIContext, callback?: Callback\<NavDestinationSwitchInfo\>): void 1047 1048取消监听Navigation的页面切换事件。 1049 1050**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1051 1052**系统能力:** SystemCapability.ArkUI.ArkUI.Full 1053 1054**参数:** 1055 1056| 参数名 | 类型 | 必填 | 说明 | 1057| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 1058| type | string | 是 | 监听事件,固定为'navDestinationSwitch',即Navigation的页面切换事件。 | 1059| context | [UIAbilityContext](../apis-ability-kit/js-apis-inner-application-uiAbilityContext.md) \| [UIContext](./arkts-apis-uicontext-uicontext.md) | 是 | 上下文信息,用以指定监听页面切换事件的范围。 | 1060| callback | Callback\<[NavDestinationSwitchInfo](#navdestinationswitchinfo12)\> | 否 | 需要被注销的回调函数。 | 1061 1062**示例:** 1063 1064参考[uiObserver.on('navDestinationSwitch')](#uiobserveronnavdestinationswitch12)示例。 1065 1066## uiObserver.on('navDestinationSwitch')<sup>12+</sup> 1067 1068on(type: 'navDestinationSwitch', context: UIAbilityContext | UIContext, observerOptions: NavDestinationSwitchObserverOptions, callback: Callback\<NavDestinationSwitchInfo\>): void 1069 1070监听Navigation的页面切换事件。 1071 1072**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1073 1074**系统能力:** SystemCapability.ArkUI.ArkUI.Full 1075 1076**参数:** 1077 1078| 参数名 | 类型 | 必填 | 说明 | 1079| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 1080| type | string | 是 | 监听事件,固定为'navDestinationSwitch',即Navigation的页面切换事件。 | 1081| context | [UIAbilityContext](../apis-ability-kit/js-apis-inner-application-uiAbilityContext.md) \| [UIContext](./arkts-apis-uicontext-uicontext.md) | 是 | 上下文信息,用以指定监听页面切换事件的范围。 | 1082| observerOptions | [NavDestinationSwitchObserverOptions](#navdestinationswitchobserveroptions12) | 是 | 监听选项。 | 1083| callback | Callback\<[NavDestinationSwitchInfo](#navdestinationswitchinfo12)\> | 是 | 回调函数。携带NavDestinationSwitchInfo,返回页面切换事件的信息。 | 1084 1085**示例:** 1086 1087```ts 1088// EntryAbility.ets 1089// 演示 uiObserver.on('navDestinationSwitch', UIAbilityContext, NavDestinationSwitchObserverOptions, callback) 1090// uiObserver.off('navDestinationSwitch', UIAbilityContext, NavDestinationSwitchObserverOptions, callback) 1091import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 1092import { uiObserver, window } from '@kit.ArkUI'; 1093import { hilog } from "@kit.PerformanceAnalysisKit" 1094 1095function callbackFunc(info: uiObserver.NavDestinationSwitchInfo) { 1096 console.info(`testTag navDestinationSwitch from: ${JSON.stringify(info.from)} to: ${JSON.stringify(info.to)}`) 1097} 1098 1099export default class EntryAbility extends UIAbility { 1100 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { 1101 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); 1102 uiObserver.on('navDestinationSwitch', this.context, { 1103 navigationId: "myNavId" 1104 }, callbackFunc); 1105 } 1106 1107 onDestroy(): void { 1108 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); 1109 uiObserver.off('navDestinationSwitch', this.context, { 1110 navigationId: "myNavId" 1111 }, callbackFunc); 1112 } 1113 1114 onWindowStageCreate(windowStage: window.WindowStage): void { 1115 // Main window is created, set main page for this ability 1116 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); 1117 1118 windowStage.loadContent('pages/Index', (err, data) => { 1119 if (err.code) { 1120 hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); 1121 return; 1122 } 1123 hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); 1124 }); 1125 } 1126 1127 onWindowStageDestroy(): void { 1128 // Main window is destroyed, release UI related resources 1129 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); 1130 } 1131 1132 onForeground(): void { 1133 // Ability has brought to foreground 1134 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); 1135 } 1136 1137 onBackground(): void { 1138 // Ability has back to background 1139 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); 1140 } 1141} 1142``` 1143 1144```ts 1145// Index.ets 1146// 演示 uiObserver.on('navDestinationSwitch', UIContext, NavDestinationSwitchObserverOptions, callback) 1147// uiObserver.off('navDestinationSwitch', UIContext, NavDestinationSwitchObserverOptions, callback) 1148import { uiObserver } from '@kit.ArkUI'; 1149 1150@Component 1151struct PageOne { 1152 build() { 1153 NavDestination() { 1154 Text("pageOne") 1155 }.title("pageOne") 1156 } 1157} 1158 1159function callbackFunc(info: uiObserver.NavDestinationSwitchInfo) { 1160 console.info(`testTag navDestinationSwitch from: ${JSON.stringify(info.from)} to: ${JSON.stringify(info.to)}`) 1161} 1162 1163@Entry 1164@Component 1165struct Index { 1166 private stack: NavPathStack = new NavPathStack(); 1167 1168 @Builder 1169 PageBuilder(name: string) { 1170 PageOne() 1171 } 1172 1173 aboutToAppear() { 1174 uiObserver.on('navDestinationSwitch', this.getUIContext(), { navigationId: "myNavId" }, callbackFunc) 1175 } 1176 1177 aboutToDisappear() { 1178 uiObserver.off('navDestinationSwitch', this.getUIContext(), { navigationId: "myNavId" }, callbackFunc) 1179 } 1180 1181 build() { 1182 Column() { 1183 Navigation(this.stack) { 1184 Button("push").onClick(() => { 1185 this.stack.pushPath({ name: "pageOne" }); 1186 }) 1187 } 1188 .id("myNavId") 1189 .title("Navigation") 1190 .navDestination(this.PageBuilder) 1191 } 1192 .width('100%') 1193 .height('100%') 1194 } 1195} 1196``` 1197 1198## uiObserver.off('navDestinationSwitch')<sup>12+</sup> 1199 1200off(type: 'navDestinationSwitch', context: UIAbilityContext | UIContext, observerOptions: NavDestinationSwitchObserverOptions, callback?: Callback\<NavDestinationSwitchInfo\>): void 1201 1202取消监听Navigation的页面切换事件。 1203 1204**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1205 1206**系统能力:** SystemCapability.ArkUI.ArkUI.Full 1207 1208**参数:** 1209 1210| 参数名 | 类型 | 必填 | 说明 | 1211| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 1212| type | string | 是 | 监听事件,固定为'navDestinationSwitch',即Navigation的页面切换事件。 | 1213| context | [UIAbilityContext](../apis-ability-kit/js-apis-inner-application-uiAbilityContext.md) \| [UIContext](./arkts-apis-uicontext-uicontext.md) | 是 | 上下文信息,用以指定监听页面切换事件的范围。 | 1214| observerOptions | [NavDestinationSwitchObserverOptions](#navdestinationswitchobserveroptions12) | 是 | 监听选项。 | 1215| callback | Callback\<[NavDestinationSwitchInfo](#navdestinationswitchinfo12)\> | 否 | 需要被注销的回调函数。 | 1216 1217**示例:** 1218 1219参考[uiObserver.on('navDestinationSwitch')](#uiobserveronnavdestinationswitch12-1)接口示例。 1220 1221## uiObserver.on('tabContentUpdate')<sup>12+</sup> 1222 1223on(type: 'tabContentUpdate', callback: Callback\<TabContentInfo\>): void 1224 1225监听TabContent页面的切换事件。 1226 1227**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1228 1229**系统能力:** SystemCapability.ArkUI.ArkUI.Full 1230 1231**参数:** 1232 1233| 参数名 | 类型 | 必填 | 说明 | 1234| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 1235| type | string | 是 | 监听事件,固定为'tabContentUpdate',即TabContent页面的切换事件。 | 1236| callback | Callback\<[TabContentInfo](#tabcontentinfo12)\> | 是 | 回调函数。携带TabContentInfo,返回TabContent页面切换事件的信息。 | 1237 1238**示例:** 1239 1240```ts 1241import { uiObserver } from '@kit.ArkUI'; 1242 1243function callbackFunc(info: uiObserver.TabContentInfo) { 1244 console.info(`tabContentUpdate ${JSON.stringify(info)}`); 1245} 1246 1247@Entry 1248@Component 1249struct TabsExample { 1250 1251 aboutToAppear(): void { 1252 uiObserver.on('tabContentUpdate', callbackFunc); 1253 } 1254 1255 aboutToDisappear(): void { 1256 uiObserver.off('tabContentUpdate', callbackFunc); 1257 } 1258 1259 build() { 1260 Column() { 1261 Tabs() { 1262 TabContent() { 1263 Column().width('100%').height('100%').backgroundColor('#00CB87') 1264 }.tabBar('green').id('tabContentId0') 1265 1266 TabContent() { 1267 Column().width('100%').height('100%').backgroundColor('#007DFF') 1268 }.tabBar('blue').id('tabContentId1') 1269 1270 TabContent() { 1271 Column().width('100%').height('100%').backgroundColor('#FFBF00') 1272 }.tabBar('yellow').id('tabContentId2') 1273 1274 TabContent() { 1275 Column().width('100%').height('100%').backgroundColor('#E67C92') 1276 }.tabBar('pink').id('tabContentId3') 1277 } 1278 .width(360) 1279 .height(296) 1280 .backgroundColor('#F1F3F5') 1281 .id('tabsId') 1282 }.width('100%') 1283 } 1284} 1285``` 1286 1287## uiObserver.off('tabContentUpdate')<sup>12+</sup> 1288 1289off(type: 'tabContentUpdate', callback?: Callback\<TabContentInfo\>): void 1290 1291取消监听TabContent页面的切换事件。 1292 1293**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1294 1295**系统能力:** SystemCapability.ArkUI.ArkUI.Full 1296 1297**参数:** 1298 1299| 参数名 | 类型 | 必填 | 说明 | 1300| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 1301| type | string | 是 | 监听事件,固定为'tabContentUpdate',即TabContent页面的切换事件。 | 1302| callback | Callback\<[TabContentInfo](#tabcontentinfo12)\> | 否 | 需要被注销的回调函数。 | 1303 1304**示例:** 1305 1306参考[uiObserver.on('tabContentUpdate')](#uiobserverontabcontentupdate12)接口示例。 1307 1308## uiObserver.on('tabContentUpdate')<sup>12+</sup> 1309 1310on(type: 'tabContentUpdate', options: ObserverOptions, callback: Callback\<TabContentInfo\>): void 1311 1312监听TabContent页面的切换事件。 1313 1314**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1315 1316**系统能力:** SystemCapability.ArkUI.ArkUI.Full 1317 1318**参数:** 1319 1320| 参数名 | 类型 | 必填 | 说明 | 1321| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 1322| type | string | 是 | 监听事件,固定为'tabContentUpdate',即TabContent页面的切换事件。 | 1323| options | [ObserverOptions](#observeroptions12) | 是 | 指定监听的Tabs组件的id。 | 1324| callback | Callback\<[TabContentInfo](#tabcontentinfo12)\> | 是 | 回调函数。携带TabContentInfo,返回TabContent页面切换事件的信息。 | 1325 1326**示例:** 1327 1328```ts 1329import { uiObserver } from '@kit.ArkUI'; 1330 1331function callbackFunc(info: uiObserver.TabContentInfo) { 1332 console.info(`tabContentUpdate ${JSON.stringify(info)}`); 1333} 1334 1335@Entry 1336@Component 1337struct TabsExample { 1338 1339 aboutToAppear(): void { 1340 uiObserver.on('tabContentUpdate', { id: 'tabsId' }, callbackFunc); 1341 } 1342 1343 aboutToDisappear(): void { 1344 uiObserver.off('tabContentUpdate', { id: 'tabsId' }, callbackFunc); 1345 } 1346 1347 build() { 1348 Column() { 1349 Tabs() { 1350 TabContent() { 1351 Column().width('100%').height('100%').backgroundColor('#00CB87') 1352 }.tabBar('green').id('tabContentId0') 1353 1354 TabContent() { 1355 Column().width('100%').height('100%').backgroundColor('#007DFF') 1356 }.tabBar('blue').id('tabContentId1') 1357 1358 TabContent() { 1359 Column().width('100%').height('100%').backgroundColor('#FFBF00') 1360 }.tabBar('yellow').id('tabContentId2') 1361 1362 TabContent() { 1363 Column().width('100%').height('100%').backgroundColor('#E67C92') 1364 }.tabBar('pink').id('tabContentId3') 1365 } 1366 .width(360) 1367 .height(296) 1368 .backgroundColor('#F1F3F5') 1369 .id('tabsId') 1370 }.width('100%') 1371 } 1372} 1373``` 1374 1375## uiObserver.off('tabContentUpdate')<sup>12+</sup> 1376 1377off(type: 'tabContentUpdate', options: ObserverOptions, callback?: Callback\<TabContentInfo\>): void 1378 1379取消监听TabContent页面的切换事件。 1380 1381**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 1382 1383**系统能力:** SystemCapability.ArkUI.ArkUI.Full 1384 1385**参数:** 1386 1387| 参数名 | 类型 | 必填 | 说明 | 1388| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 1389| type | string | 是 | 监听事件,固定为'tabContentUpdate',即TabContent页面的切换事件。 | 1390| options | [ObserverOptions](#observeroptions12) | 是 | 指定监听的Tabs组件的id。 | 1391| callback | Callback\<[TabContentInfo](#tabcontentinfo12)\> | 否 | 需要被注销的回调函数。 | 1392 1393**示例:** 1394 1395参考[uiObserver.on('tabContentUpdate')](#uiobserverontabcontentupdate12-1)接口示例。