HarmonyOS 鸿蒙Next Tabs.TabContent中可以跳转到其他page吗,像个人信息跳转到独立的新界面

发布于 1周前 作者 nodeper 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next Tabs.TabContent中可以跳转到其他page吗,像个人信息跳转到独立的新界面

import router from '@ohos.router';
import { userInfo}  from '../user/userInfo'

@Entry
@Component
struct userIndex {
  @State fontColor: string = '#182431'
  @State selectedFontColor: string = '#007DFF'
  @State currentIndex: number = 0
  private controller: TabsController = new TabsController()

  @Builder tabBuilder(index: number, name: string) {
    Column() {
      Text(name)
        .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor)
        .fontSize(16)
        .fontWeight(this.currentIndex === index ? 500 : 400)
        .lineHeight(22)
        .margin({ top: 17, bottom: 7 })
      Divider()
        .strokeWidth(2)
        .color('#007DFF')
        .opacity(this.currentIndex === index ? 1 : 0)
    }.width('100%')
  }

  build() {
    Column() {
      Tabs({ barPosition: BarPosition.Start, index: this.currentIndex, controller: this.controller }) {
        TabContent() {
          Text('a')
        }.tabBar(this.tabBuilder(0, 'a'))

        TabContent() {
          Text('b')
        }.tabBar(this.tabBuilder(1, 'b'))

        TabContent() {
          Text('c')
        }.tabBar(this.tabBuilder(2, 'c'))

        TabContent() {
          userInfo()
        }.tabBar(this.tabBuilder(3, '个人信息'))
      }
      .vertical(false)
      .barMode(BarMode.Fixed)
      .barWidth(360)
      .barHeight(56)
      .animationDuration(400)     
      .onChange((index: number) => {
        this.currentIndex = index
       })      
      .width('100%')
      .height('100%')
      .backgroundColor('#F1F3F5')
    }.width('100%')
  }
}
import router from '@ohos.router';
import { userInfo}  from '../user/userInfo'

@Entry
@Component
struct userIndex {
  @State fontColor: string = '#182431'
  @State selectedFontColor: string = '#007DFF'
  @State currentIndex: number = 0
  private controller: TabsController = new TabsController()

  @Builder tabBuilder(index: number, name: string) {
    Column() {
      Text(name)
        .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor)
        .fontSize(16)
        .fontWeight(this.currentIndex === index ? 500 : 400)
        .lineHeight(22)
        .margin({ top: 17, bottom: 7 })
      Divider()
        .strokeWidth(2)
        .color('#007DFF')
        .opacity(this.currentIndex === index ? 1 : 0)
    }.width('100%')
  }

  build() {
    Column() {
      Tabs({ barPosition: BarPosition.Start, index: this.currentIndex, controller: this.controller }) {
        TabContent() {
          Text('a')
        }.tabBar(this.tabBuilder(0, 'a'))

        TabContent() {
          Text('b')
        }.tabBar(this.tabBuilder(1, 'b'))

        TabContent() {
          Text('c')
        }.tabBar(this.tabBuilder(2, 'c'))

        TabContent() {
          userInfo()
        }.tabBar(this.tabBuilder(3, '个人信息'))
      }
      .vertical(false)
      .barMode(BarMode.Fixed)
      .barWidth(360)
      .barHeight(56)
      .animationDuration(400)     
      .onChange((index: number) => {
        this.currentIndex = index
       })      
      .width('100%')
      .height('100%')
      .backgroundColor('#F1F3F5')
    }.width('100%')
  }
}

image.png

3 回复
可以用router跳转到新Page,也可以用Navigation跳转到子页

谢谢,已解决!我之前用过router发现不行,因为我的url写的是./文件名,刚刚看Navigation的时候发现,router的url必须要和main_page.json中声明的路径一样才可以!

HarmonyOS 鸿蒙Next Tabs.TabContent中可以跳转到其他page。在HarmonyOS鸿蒙Next中,Tabs组件通常用于在同一个页面内展示多个TabContent内容。然而,如果你希望在点击某个Tab时跳转到独立的新界面,这是可以实现的。

你可以通过编程方式,在Tab的点击事件中触发页面跳转逻辑。具体来说,可以使用HarmonyOS提供的路由模块(Router)来实现页面间的跳转。在Tabs的某个TabContent的点击事件中,调用router.push()方法,并传入目标页面的URL和参数(如果有的话)。

需要注意的是,目标页面的URL必须与应用的配置文件(如main_page.json)中声明的路径一致,否则跳转可能会失败。

此外,如果你希望在跳转后保持底部Tabs不随着页面切换而改变,你可能需要在应用架构上进行一些调整,例如使用不同的页面栈来管理Tabs页面和其他页面。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部