前面我们说过,一个应用程序往往由多个页面组成,在使用过程中,应用往往会在不同的页面中进行跳转。那么这个是如何实现的呢?ArkUI给我们提供了两种方式,一种是比较简单易用的页面路由router,一种是官方推荐的功能更加强大但是使用上较为繁琐的组件导航Navigation。两种方式的详细区别可以参考官方文档设置组件导航和页面路由-UI开发 (ArkTS声明式开发范式)-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者:
需要支持路由跳转的页面必须配置在src/main/resources/profile/main_pages.json中:
我们可以先创建一个ets文件然后写好组件代码,再手动到该文件去增加配置,也可以直接创建一个页面类型的ets文件。在文件浏览器中的pages文件夹上单击右键->New->Page->Empty Page,DevEco会自动帮我们生成一个HelloWorld页面并在main_pages中增加配置:
现在我们有两个可以被路由跳转的页面了,让我们来测试一下。router在使用之前需要先导包,我们在Index页面代码的顶端导入router包:
然后在Button的点击事件中使用router的pushUrl()方法配置路由跳转。pushUrl()接收一个配置项类对象和一个回调函数作为参数,我们可以先忽略回调函数,只传配置项类对象作为参数。配置项中的url是在Main_pages文件中配置好的页面url:
保存代码并重载预览器,现在我们点击Index页面的搜索按钮,就会跳转到刚刚新建的PageOne页面了:
就像一个人会有出生、成年、结婚、死亡等重要时刻一样,组件同样也有自己的创建、显示、隐藏、销毁等重要时刻,这就是组件的生命周期,我们可以在这些特定的时刻通过生命周期函数(又称生命周期钩子函数,简称钩子)进行数据请求、获取参数等需要的操作。所有类型的组件(页面组件和非页面组件)都有以下两个生命周期函数:
- aboutToAppear():组件被创建之后(未显示之前)会调用
- aboutToDisappear():组件被销毁之前会被调用
如果是页面组件,还会有额外的三个生命周期函数:
- onPageShow():页面每次显示时会被调用
- onPageHide();页面每次隐藏时会被调用
- onBackPress():当前页面上通过导航按键或者手势操作回退时会被调用
我们在PageOne页面中通过日志打印来验证一下各个生命周期函数被调用的时机:
我们从Index页面点击按钮进行页面跳转,可以看到aboutToAppear()和onPageShow()被调用了,且调用顺序是先aboutToAppear()再onPageShow(),并不受代码中钩子的实现顺序影响:
再按下预览器上方的返回按钮,可以看到onBackPress()、onPageHide()、aboutToDisappear()被依次调用了: