HarmonyOS 鸿蒙Next 在最新导航中推荐使用Navigation加动态路由实现的问题 如何在实际执行时仅第一个入口页面使用Navigation设置Mode,而其他页面动态设置是否分栏?部分页面需要分栏,部分页面不需要,该如何实现?

发布于 1周前 作者 bupafengyu 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 在最新导航中推荐使用Navigation加动态路由实现的问题
如何在实际执行时仅第一个入口页面使用Navigation设置Mode,而其他页面动态设置是否分栏?部分页面需要分栏,部分页面不需要,该如何实现?

在最新的导航时是推荐使用Navigation加动态路由实现,那在实际执行时只有第一个入口页面会使用Navigation,可以设置Mode,那其他的页面不能再动态设置是否分栏了吗?该怎么实现,部分页面需要分栏,部分页面不需要的情况呢。


更多关于HarmonyOS 鸿蒙Next 在最新导航中推荐使用Navigation加动态路由实现的问题 如何在实际执行时仅第一个入口页面使用Navigation设置Mode,而其他页面动态设置是否分栏?部分页面需要分栏,部分页面不需要,该如何实现?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

可以通过 

@StorageLink(‘isSplit’) isSplit: boolean = false;

AppStorage.set(‘isSplit’,true)

来实现。

在需要的地方修改isSplit的值来触发界面刷新。

请参考代码:

// Index.ets

[@Entry](/user/Entry)

[@Component](/user/Component)

struct Index {

  [@State](/user/State) nav:NavPathStack = new NavPathStack()

  [@StorageLink](/user/StorageLink)('isSplit') isSplit: boolean = false;

  aboutToAppear(): void {

    AppStorage.setOrCreate('isSplit',false);

    AppStorage.setOrCreate('pathStack',this.nav)

  }

  build() {

    Navigation(this.nav){

      Column()

        .backgroundColor('#f00')

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

        .onClick(()=>{

          this.nav.pushPathByName('Page','')

        })

    }

    .mode(this.isSplit? NavigationMode.Split : NavigationMode.Stack)

    .hideTitleBar(true)

    .hideToolBar(true)

  }

}

// Page.ets

[@Builder](/user/Builder)

export function PageBuilder() {

  Page()

}

[@Entry](/user/Entry)

[@Component](/user/Component)

struct Page {

  onPageShow(): void {

    AppStorage.set('isSplit',true)

  }

  build() {

    NavDestination(){

      RelativeContainer() {

        Text('Hello')

          .alignRules({

            center: { anchor: '__container__', align: VerticalAlign.Center },

            middle: { anchor: '__container__', align: HorizontalAlign.Center }

          })

      }

      .onClick(()=>{

        let a = AppStorage.get<boolean>('isSplit')

        if (a == false || a == undefined) {

          AppStorage.set('isSplit',true)

        }else{

          AppStorage.set('isSplit',false)

        }

      })

      .height('100%')

      .width('100%')

    }

  }

}

更多关于HarmonyOS 鸿蒙Next 在最新导航中推荐使用Navigation加动态路由实现的问题 如何在实际执行时仅第一个入口页面使用Navigation设置Mode,而其他页面动态设置是否分栏?部分页面需要分栏,部分页面不需要,该如何实现?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS 鸿蒙Next系统中,若要在最新导航中针对特定页面使用Navigation设置Mode,并动态控制其他页面的分栏显示,可以采取以下方案:

首先,在首个入口页面配置Navigation时,通过IntentPageOptions明确设置其Mode。这通常在页面启动或导航配置中完成,确保首个页面按照预期模式显示。

对于后续页面,可在页面跳转时动态传递参数(如通过PageOptions或全局状态管理),指示该页面是否需要分栏。页面接收到参数后,在onPageStartedonPageVisible等生命周期方法中,根据参数值调整UI布局。例如,若参数指示需要分栏,则加载分栏布局;否则,加载无分栏布局。

实现时,可利用HarmonyOS提供的UI框架和组件,如DirectionalLayoutStackLayout等,根据条件动态构建页面布局。同时,确保页面间的数据传递和状态管理逻辑清晰,避免状态混乱。

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

回到顶部