HarmonyOS NEXT - 页面路由

在创建项目时: 在src/main/ets/entryability目录下,会生成EntryAbility.ts 在src/main/ets/pages目录下,会生成一个Index页面。

在EntryAbility的onWindowStageCreate方法中指定了应用的入口页面

那么,入口页面如何跳转到其他页面呢? HarmonyOS提供了Router模块,通过不同的url地址,可以方便地进行页面路由,轻松地访问不同的页面。

导入@ohos.router (页面路由)

import { router } from **********';

常见用法 API 说明

router.pushUrl(options: RouterOptions)	//跳转到指定页面
router.replaceUrl(options: RouterOptions)	//替换当前页面
router.back(options?: RouterOptions)	//返回上一页面或指定的页面
router.clear()	//清空所有历史页面,仅保留当前页面记录。

实例演示 首页→登录→个人中心 home

import {router} from **********'

@Entry
@Component
struct Index {
  @State message: string = '首页';
  @State isLogin:boolean=true;

  build() {
    RelativeContainer() {
      Button("个人中心").onClick(()=>{
        if(this.isLogin){
          router.pushUrl({url:'pages/Person'})
        }else{
          router.pushUrl({url:'pages/Login'})
        }
      })

      Text(this.message)
        .id('HelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
    }
    .height('100%')
    .width('100%')
  }
}

login

import { router } from **********';

@Entry
@Component
struct Login {
  @State message: string = '登录/注册';

  build() {
    Column({space:10}) {
      Row(){
        Button("返回").onClick(()=>{
          router.back()
        }).backgroundColor("#CCCCCC")
      }.width("100%")

      Text(this.message)
        .id('LoginHelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)

      TextInput({placeholder:"请输入用户名/手机号"})
      TextInput({placeholder:"请输入密码"}).type(InputType.Password)

      Button("提交").onClick(()=>{
        // router.pushUrl({url:"pages/Person"});// 首页 - 登录页 - 个人中心页 - 返回:首页
        router.replaceUrl({url:"pages/Person"});// 首页 -(登录页:替换成个人中心页)-返回:首页
      })
    }
    .height('100%')
    .width('100%')
  }
}

person

import { router } from **********';

@Entry
@Component
struct Person {
  @State message: string = '个人中心';

  build() {
    Column() {
      Button("返回").onClick(()=>{
        router.back()
      }).backgroundColor("#CCCCCC")

      Text(this.message)
        .id('PersonHelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)

      Button("清空页面历史记录").onClick(()=>{
        router.clear()
      })
    }
    .height('100%')
    .width('100%')
  }
}
全部评论

相关推荐

第一题:爬山首先俺们的Bob在一个风和日丽的日子选择去登珠峰,我们需要在n个特殊的日子(人话就是n天时间内)在大本营找到合适的时间去登山。但是需要知道补给只能维持k天,所以Bob最多只能待k天时间,所以他可能会在不适合爬山的日子撤回到低海拔地区。下撤是需要考虑移动次数的。所以我们需要算的就是他在低海拔出发低海拔结束,在不错过n个日子且在大本营生活天数不超过k天的前提下最少的移动次数是多少。思路首先我们将输入进行拆分,举个例子,[2,3,4,7,8]五天时间,我们拆分为[2,3,4]和[7.8]两个区间,每个连续区间内他都只需要进入一次大本营,离开一次,所以我们区间数(最开始统计到的连续区间)p就是至少需要移动的一半。接下来我们来优化移动次数设p为最开始的连续区间数,假设我们停留k天,有n天时间登山,实际上额外停留时间为k - n。所以现在计算非登山日的间隔天数,我们将间隔从小到大排序,尽可能多利用可用额外的停留天数来减少p。具体操作为:从最小的间隔开始,如果还能住,就可以减少一次移动机会(即合并两个区间),直到不能合并就可以得到p的最后结果即移动次数。第二题:买车某人要去买车,需要保证载X人,拉货Y吨,有n种车。对第i种车价值mi元,有ki种方案,默认拉人xi,拉货yi。第i种方案需要mij元,可以选配件让拉人为xij拉货为yij。但是只能选一种。然后要买多种车需要最少的钱。思路相信所有人百分百第一眼看到这题第一反应是,这人有毛病吧!好我们梳理一下首先,问题就是至少载X人,至少载Y吨货,然后花费最少。可以选择的方案有多种,最基本的为mi元,xi人,yi吨。或者别的。解决方案:我们把每种汽车和方案都看成一个“物品”,费用就是汽车的价格,收益就是购买某个汽车后它有一定的承载能力。也就是说我们可以直接转化为一个二维费用的完全背包问题。对于该问题直接采用动态规划。假设dp[x][y]满足至少x人y吨且花费最小接下来定义方程最开始dp[0][0]=0即初始状态。依次遍历所有的方案(cost, cap_x, cap_y):​完全背包的思想:同一种车买多次,每次购买都会增加承载能力​朴素的完全背包思想:从小到大遍历x, y:dp[min(X, x + cap_x)][min(Y, y + cap_y)] = min(dp[min(X,x+cap_x)][min(Y,y+cap_y)],dp[x][y]+cost)计算过程就是累计遍历所有的方案逐步更新dp,最后得到的就是最小花费。这里需要注意我们最后如果值依旧是无穷大则说明无法满足直接返回 -1。代码详细看我主页www.lx02918.ltd。如果没有说明我还没发(尤其是我这篇刚发出来!)然后我第二题是没有完全做出来的,时间超了,最后几分钟实在优化不出来了。
投递小米集团等公司8个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务