场景描述在App实际开发过程中,常常会遇到需要跳转到其他功能模块的某个页面中的情况。在该场景下,依据不同的业务处理结果会跳转到不同的页面来展示,这样用户体验更好。该功能场景在HarmonyOS中该如何实现呢?
知识准备1、应用级变量的状态管理2、Ability生命周期以MainAbility中的某个页面index为例,来启动某个Ability,例如CommonAbility,并跳转到指定页面commonPage1。以此为例来演示如何实现该场景。场景一:当CommonAbility未启动时当该Ability未启动时,可以按照如下方式来实现:步骤1:在MainAbility创建时将上下文context保存到应用中。export default class MainAbility extends Ability { onCreate(want, launchParam) { AppStorage.SetOrCreate("ABILITY_CONTEXT",this.context); } }步骤2:在MainAbility的index页面中启动CommonAbility,并将需要跳转的页面通过want中的uri参数指定。startAbility(){ let context = AppStorage.Get("ABILITY_CONTEXT") as context.AbilityContext; let want = { deviceId:"",//跨设备启动时传入,同设备时不需要传入 bundleName:"com.example.startabilitytopage",//指定启动Ability所在的Hap包 abilityName:"CommonAbility",//指定启动的Ability uri:"pages/commonPage1"//指定跳转页面 } context.startAbility(want).then(()=>{ console.info("start CommonAbility success") }).catch((err)=>{ console.info("start CommonAbility failed,error is : "+err) }) }步骤3:在指定启动的CommonAbility中的onCreate()生命周期函数中将传递过来的参数信息保存下来。export default class CommonAbility extends Ability { onCreate(want, launchParam) { AppStorage.SetOrCreate("WANT_PAGE",want) } }步骤4:在指定启动的CommonAbility中窗口创建时,将保存的页面参数取出,并加载该页面。export default class CommonAbility extends Ability { onWindowStageCreate(windowStage: Window.WindowStage) { // Main window is created, set main page for this ability let firstPage = "pages/index";//设置默认加载页面 let want = AppStorage.Get("WANT_PAGE") as Want; if(want.hasOwnProperty("uri")){ firstPage = want.uri;//加载指定页面 } windowStage.loadContent(firstPage, (err, data) => { if (err.code) { hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.ERROR); hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); return; } hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); }); } }场景二:当CommonAbility已经启动时步骤1:同场共享包HSP内容访问景一的步骤1。步骤2:同场景一的步骤2。步骤3:由于CommonAbility已经启动,需要在onNewWant()回调函数中保存传递过来的参数信息。export default class CommonAbility extends Ability { onNewWant(want,launchParams){ AppStorage.SetOrCreate("WANT_PAGE",want) } } 步骤4:同场景一的步骤4。测试结果如下:点击启动CommonAbility后,跳转到指定页面commonPage1查看后台Ability情况如下:
知识准备
1、应用级变量的状态管理
2、Ability生命周期
以MainAbility中的某个页面index为例,来启动某个Ability,例如CommonAbility,并跳转到指定页面commonPage1。以此为例来演示如何实现该场景。
场景一:当CommonAbility未启动时
当该Ability未启动时,可以按照如下方式来实现:
步骤1:在MainAbility创建时将上下文context保存到应用中。
步骤2:在MainAbility的index页面中启动CommonAbility,并将需要跳转的页面通过want中的uri参数指定。
步骤3:在指定启动的CommonAbility中的onCreate()生命周期函数中将传递过来的参数信息保存下来。
步骤4:在指定启动的CommonAbility中窗口创建时,将保存的页面参数取出,并加载该页面。
场景二:当CommonAbility已经启动时
步骤1:同场共享包HSP内容访问景一的步骤1。
步骤2:同场景一的步骤2。
步骤3:由于CommonAbility已经启动,需要在onNewWant()回调函数中保存传递过来的参数信息。
步骤4:同场景一的步骤4。
测试结果如下:
点击启动CommonAbility后,跳转到指定页面commonPage1
查看后台Ability情况如下: