【问题标题】:Ionic 4 - Conditions for Page getting added to the "Navigation Stack"Ionic 4 - 页面添加到“导航堆栈”的条件
【发布时间】:2022-01-17 20:05:03
【问题描述】:

来自Ionic documentation<ion-back-button> 元素:

“点击后后退按钮会在应用的历史记录中导航回来。它足够聪明,可以根据模式知道要呈现什么以及根据导航堆栈何时显示。”

这似乎是用词不当,因为我正在开发一个没有引用 NavController 的项目(Ionic 4,Angular 10),并且“导航堆栈”暗示它基于某个导航器对象,而我认为它实际上是基于在路由器上。

我这样说是因为该项目的后退按钮有效,但仅在大多数页面上有效。对于某些人来说,除非指定了默认的 hRef,否则它不会出现,这表明存储先前页面的任何堆栈有时都没有添加页面。

我的问题是,我无法辨别导致页面被添加或不被添加到此堆栈的原因。我的项目使用 Router.navigate 在视图之间移动,有些存储上一页作为后退按钮,有些则不存储。

因此,我的问题是:确保将页面添加到<ion-back-button> 正在使用的堆栈中的条件是什么?我对这个“导航堆栈”的工作方式有什么误解吗?此堆栈是否可见?

谢谢!

【问题讨论】:

    标签: angular ionic-framework url-routing


    【解决方案1】:

    看起来你正在寻找它:

    方法​

    canGoBack​ 描述 如果当前视图可以返回,则返回 true。 签名 canGoBack(view?: ViewController | undefined) => Promise

    getActive​ 描述 获取活动视图。 签名 getActive() => Promise

    getByIndex​ 描述 获取指定索引处的视图。 签名 getByIndex(index: number) => Promise

    getPrevious​ 描述 获取上一个视图。 签名 getPrevious(view?: ViewController | undefined) => Promise

    insert​ 描述 将组件插入到导航堆栈中指定索引处。 这对于在导航堆栈中的任何位置添加组件很有用。 签名 insert(insertIndex: number, component: T, componentProps?: ComponentProps | null | undefined, opts?: NavOptions | null | undefined, done?: TransitionDoneFn | undefined) => Promise

    insertPages​ 描述 将组件数组插入到导航堆栈中指定索引处。 数组中的最后一个组件将被实例化为视图,并进行动画处理 成为活动视图。 签名 insertPages(insertIndex: number, insertComponents: NavComponent[] | NavComponentWithProps[], opts?: NavOptions | null | undefined, done?: TransitionDoneFn | undefined) => Promise

    pop​ 描述 从导航堆栈中弹出一个组件。从当前导航返回 零件。 签名 pop(opts?: NavOptions | null | undefined, done?: TransitionDoneFn | undefined) => Promise

    popTo​ 描述 弹出到导航堆栈中的特定索引。 签名 popTo(indexOrViewCtrl: number | ViewController, opts?: NavOptions | null | undefined, done?: TransitionDoneFn | undefined) => Promise

    popToRoot​ 描述 导航回到堆栈的根,不管它有多远。 签名 popToRoot(opts?: NavOptions | null | undefined, done?: TransitionDoneFn | undefined) => Promise

    push​ 描述 将新组件推送到当前导航堆栈。通过任何额外的 信息作为一个对象。可以访问此附加信息 通过导航参数。 签名 push(component: T, componentProps?: ComponentProps | null | undefined, opts?: NavOptions | null | undefined, done?: TransitionDoneFn | undefined) => Promise 移除索引​ 描述 从指定索引处的导航堆栈中移除一个组件。 签名 removeIndex(startIndex: number, removeCount?: number, opts?: NavOptions | null | undefined, done?: TransitionDoneFn | undefined) => Promise

    setPages​ 描述 设置当前导航栈的视图,并导航到最后一个视图。 默认情况下动画是禁用的,但可以通过传递选项来启用它们 到导航控制器。导航参数也可以传递给 数组中的各个页面。 签名 setPages(views: NavComponent[] | NavComponentWithProps[], opts?: NavOptions | null | undefined, done?: TransitionDoneFn | undefined) => Promise

    setRoot​ 描述 将当前导航栈的根设置为一个组件。 签名 setRoot(component: T, componentProps?: ComponentProps | null | undefined, opts?: NavOptions | null | undefined, done?: TransitionDoneFn | undefined) => Promise

    来源:https://ionicframework.com/docs/api/nav

    【讨论】:

    • 响应感谢,但是,我正在处理的项目不使用 <ion-nav>,我想继续使用现有的 Angular Router,目前大部分逻辑都基于该 Angular。我不确定这些是否能够告诉我Router 是否会使用“导航堆栈”中的某物。
    • 我认为如果你想用 ion-back-button 绑定堆栈,你必须使用 navController。这对我的项目很有效!
    • 但是我的项目中有一个<ion-back-button>,它不使用导航控制器。它确实有效,但并不完美,但往往不是。这就是为什么我相信你不必使用 navController。
    • 而且不放baseHref就不会出现吧?
    • 对于某些页面,baseHred 是不需要的,它按预期工作,导航到上一页,即使上一页不是“主页”页面。对于其他人,除非指定 baseHref,否则它不会出现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    相关资源
    最近更新 更多