HarmonyOS4.0系列——07、自定义组件的生命周期、路由以及路由传参

自定义组件的生命周期

允许在生命周期函数中使用 Promise 和异步回调函数,比如网络资源获取,定时器设置等;

页面生命周期

即被@Entry 装饰的组件生命周期,提供以下生命周期接口:

onPageShow

页面加载时触发,页面每次显示时触发一次,包括路由过程、应用进入前台等场景。

onPageHide

从第一个页面跳转第二个页面后,第一个页面会最为后台,触发onPageHide生命周期

页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景。
下面是代码尝试

LifeCycle页面

import router from '@ohos.router'
@Entry
@Component
struct LifeCycle {
  @State message: string = '第一页'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(25)
        Divider()
        Button('Next').onClick(() => {
          router.pushUrl({url:'pages/LifeCycle2'})
        })
          .fontSize(25)
      }
      .width('100%')
    }
    .height('100%')
  }
  onPageShow() {
    console.log('第一页:——onPageShow')
  }

  onPageHide() {
    console.log('第一页:——onPageHide')
  }

  onBackPress() {
    console.log('第一页:——onBackPress')
  }
}

LifeCycle2页面

import router from '@ohos.router'

@Entry
@Component
struct LifeCycle2 {
  @State message: string = '第二页'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(25)
        Divider()
        Button('Back').onClick((event: ClickEvent) => {
          router.back()
        })
          .fontSize(25)

      }
      .width('100%')
    }
    .height('100%')
  }

  onPageShow() {
    console.log('第二页:——onPageShow')
  }

  onPageHide() {
    console.log('第二页:——onPageHide')
  }

  onBackPress() {
    console.log('第二页:——onBackPress')
  }
}

效果的话大家可以从 DevEco Studio 左下角第四个日志中查看具体效果。

onBackPress

监听物理返回键,也就是手机上的回退,并不是路由连接router.back()的返回.
请添加图片描述

组件生命周期

一般用@Component 装饰的自定义组件的生命周期,提供以下生命周期接口:

aboutToAppear

在 build 构建之前渲染此生命周期。
详解:aboutToAppear 函数在创建自定义组件的新实例后,在执行其 build()函数之前执行。允许在 aboutToAppear 函数中改变状态变量,更改将在后续执行 build()函数中生效。

aboutToDisappear

组件销毁时触发,例如删除,移出等操作。
详解:aboutToDisappear 函数在自定义组件析构销毁之前执行。不允许在 aboutToDisappear 函数中改变状态变量,特别是@Link 变量的修改可能会导致应用程序行为不稳定。

例:

import router from '@ohos.router'

@Entry
@Component
struct LifeCycle {
  @State message: string = '第一页'
  @State status: boolean = true

  build() {
    Row() {
      Column({ space: 20 }) {
        Text(this.message)
          .fontSize(25)
        Divider()
        Button('Next').onClick(() => {
          router.pushUrl({ url: 'pages/LifeCycle2' })
        })
          .fontSize(25)
        Divider()
        if (this.status) {
          LifeCycle_son()
        }
        Button('上段文字显示/隐藏').onClick(() => {
          this.status = !this.status
        }).fontSize(25)
      }
      .width('100%')
    }
    .height('100%')
  }

  onPageShow() {
    console.log('第一页:——onPageShow')
  }

  onPageHide() {
    console.log('第一页:——onPageHide')
  }

  onBackPress() {
    console.log('第一页:——onBackPress')
  }
}

@Component
struct LifeCycle_son {
  build() {
    Column() {
      Text('我是第一页的一个子组件')
        .fontSize(30)
    }
  }
  // aboutToAppear函数在创建自定义组件的新实例后,在执行其build()函数之前执行。
  aboutToAppear() {
    console.log('我是第一页的一个子组件:aboutToAppear')
  }

  // aboutToDisappear函数在自定义组件析构销毁之前执行。
  aboutToDisappear() {
    console.log('我是第一页的一个子组件:aboutToDisappear')
  }
}

请添加图片描述

点击两次上段文字显示/隐藏按钮
依次出现上述的生命周期为:
请添加图片描述

可以看到,如果将组件删除的话就可以触发aboutTodisappear生命周期
再次点击显示时触发aboutToAppear生命周期。当然默认的话会先触发aboutToAppear,因为他默认组件LifeCycle_son是先存在的。

页面路由

路由跳转

router.pushUrl({ url: "路径" });

路由传参

router.pushUrl({
  url: "/pages/LifeCycle2",
  params: {
    id: 1,
    username: "Southern Wind",
    age: 18,
  },
});

接受参数username,在LifeCycle2页面router.getParams()

let username = router.getParams()['username'] as string

效果:
请添加图片描述

应用之间传参

公共数据共享创建参数

// 应用程序数据共享
AppStorage.Set('message','我要玩原神')
AppStorage.SetOrCreate('message2','Southern Wind')

其他页面获取此数据

let name:string = AppStorage.Get('message2')

注意:此Api需要用真机进行调试,模拟器没有效果的!!

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
我很高兴回答你关于Vue监听器、生命周期、组件通信和路由的学习感受问题。 对于Vue监听器,我发现它非常有用。通过监听器,我可以追踪Vue实例中数据的变化,并在数据发生变化时执行特定的操作。这对于实时更新视图、处理用户输入以及响应数据变化非常有帮助。 在学习Vue的生命周期时,我发现它提供了很多钩子函数,可以在不同阶段执行特定的代码逻辑。这使得我能够更好地理解Vue实例在创建、更新和销毁过程中的行为。特别是在处理异步操作、资源清理以及与第三方库集成时,生命周期钩子函数非常有用。 组件通信是Vue中一个重要的概念。通过props和自定义事件,我可以将数据从父组件传递到子组件,也可以在子组件中触发事件来通知父组件。这种组件之间的通信方式非常灵活,使得我能够构建出复杂的应用程序结构。 至于路由,Vue提供了vue-router插件来实现前端路由功能。学习路由的过程中,我掌握了如何定义路由、配置路由参数以及导航守卫等概念。通过路由,我可以实现页面之间的切换和导航,以及动态加载组件,提高了用户体验。 总的来说,学习Vue的监听器、生命周期、组件通信和路由等概念,让我更深入地理解了Vue框架的核心特性和工作原理。这些概念的灵活运用,使我能够开发出更加强大和可维护的Vue应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Southern Wind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值