getRootNav() 和 navCtrl() 方法之间的差异

2024-02-03

你能告诉我以下两种方法有什么区别吗?我应该在哪个时刻使用它?

book.ts

this.app.getRootNav().push('FromBook', { bookId: this.data.id })

this.navCtrl.push('FromBook', { bookId: this.data.id });

当我们使用像下面这样的内部组件时,有时它可以工作,有时则不行。为什么上面两种导航方法会有这种不同的行为?

作者页面.html

<div>
        <book *ngFor="let book of authorData?.books" [data]="book"></book>
</div>

两种方法都向当前 Nav 组件添加新页面,唯一的区别是哪个导航控制器.

如果您的应用程序是一个选项卡页面,具有多个选项卡,则每个选项卡都有自己的导航组件。这就是为什么如果您尝试通过执行以下操作从子选项卡内部推送页面this.navCtrl.push(ThePage)如果您切换到另一个选项卡,则不会显示该新页面,但如果您返回到上一个选项卡,该页面仍然可见。这是因为页面被推送到子导航组件,即来自单个选项卡的导航组件。

如果你使用this.app.getRootNav().push(ThePage),您将新页面推送到根应用程序的导航组件,因此您正在执行的组件是否有自己的导航组件并不重要,将使用根组件中的导航。

该选项卡只是一个示例,当您尝试从任何位置推送页面时,该选项卡都是有效的覆盖组件(弹出框、模式、警报等)

这包含在the docs https://ionicframework.com/docs/api/navigation/NavController/#navigating-from-an-overlay-component:

从覆盖组件导航

如果您想从覆盖组件(弹出窗口、 模式、警报等)?在此示例中,我们在我们的窗口中显示了一个弹出窗口 应用程序。从弹出窗口中,我们将获得根 NavController 的引用 在我们的应用程序中,使用 getRootNav() 方法。

import { Component } from '@angular/core';
import { App, ViewController } from 'ionic-angular';

@Component({
    template: `
    <ion-content>
      <h1>My PopoverPage</h1>
      <button ion-button (click)="pushPage()">Call pushPage</button>
     </ion-content>
    `
  })
  class PopoverPage {
    constructor(
      public viewCtrl: ViewController
      public appCtrl: App
    ) {}

    pushPage() {
      this.viewCtrl.dismiss();
      this.appCtrl.getRootNav().push(SecondPage);
    }
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

getRootNav() 和 navCtrl() 方法之间的差异 的相关文章

随机推荐

  • 具有定义值的 Typescript 动态对象键

    我遇到一个问题 试图让打字稿为我识别 javascript 对象的键 同时强制每个键的值类型 因为我想创建对象键的类型 所以我不能只创建一个常规的type MyObject key string
  • Git 分支 - HEAD 分支上的拉取请求也需要之前的分支提交

    我来自 IBM RTC 所以我需要习惯 Git 我已经分叉了一个存储库 在我的主分支上完成了几次提交并打开了一个拉取请求 Pull request original repository master lt my repository ma
  • 如何在 C# 中将 Decimal 格式化为以编程方式控制的小数位数?

    如何将数字格式化为固定的小数位数 保留尾随零 其中位数由变量指定 e g int x 3 Console WriteLine Math Round 1 2345M x 1 234 good Console WriteLine Math Ro
  • Keras 嵌入层在函数式 API 中具有可变长度

    我有以下适用于可变长度输入的顺序模型 m Sequential m add Embedding len chars 4 name embedding m add Bidirectional LSTM 16 unit forget bias
  • 将运输与 Ruby on Rails 集成

    将运输报价添加到我的购物车的最佳方法是什么 我网站的基本流程是 1 User selects products 2 User is shown cart 3 repeat 1 and 2 until User wants to pay 4
  • PostgreSQL:SELECT DISTINCT ON 表达式必须与初始 ORDER BY 表达式匹配

    假设我有以下 PostgreSQL 表 名为products CREATE TABLE IF NOT EXISTS mytable id serial NOT NULL PRIMARY KEY label VARCHAR 50 NOT NU
  • 为什么我在二叉搜索树中找不到左和右?

    我遇到以下代码片段的问题 using System using System Collections Generic using System Text namespace trees by firas class Program stat
  • 使用$_REQUEST作为数据是错误的吗?

    所以 我已经编码了一点 2年 了 我有一个非常主观的问题 使用 REQUEST作为数据是错误的吗 顺便说一句 这主要与身份验证有关 如果您考虑数据出现的 3 种方式 REQUEST 它可以来自 cookie 表单或查询字符串 现在 我知道大
  • 远程链接中奇怪的下划线参数

    我使用 Rails3 JQuery 和 will paginate gem 来制作远程分页链接 已知的解决方案是 pagination a live click function getScript this href return fal
  • 无法加载文件 %CommonDir%\publish.tlb

    每次我安装并尝试启动 Microsoft Visual Studio 2012 时 都会收到以下弹出窗口 其中包含以下消息 无法加载文件 CommonDir publish tlb 由于找不到该文件 尝试修复此情况失败 请重新安装该程序 我
  • 儒略日期到常规日期的转换

    如何使用 java API 将代表 2013 年 11 月 18 日的儒略日期 2456606 转换为字符串格式 18 11 2013 我尝试执行下面的代码 但它没有给我正确的答案 欢迎对以下代码进行任何更正 String j 245660
  • opencv VideoCapture 在线程中被阻塞

    我需要一些有关在另一个线程中使用 opencv VideoCapture 的帮助 当我使用视频截取 http docs opencv org modules highgui doc reading and writing images an
  • 二维码怎么能存储这么多数据呢?

    快速谷歌搜索结果显示 QR 码可以容纳近 3kb 8 位 数据 但这不就是用黑 白点来表示位吗 如果是这样的话 代码上不可能有超过 20 000 个点 所以我显然是误解了 有人可以解释它是如何工作的吗 电装波says http www de
  • 接受 Rails 使用条款

    在 Rails 应用程序中添加接受使用条款的检查的最佳方法是什么 我似乎无法得到validates acceptance of工作得很好 我在我的用户模型中添加了一个布尔值 有必要吗 然后有一个返回 true false 的复选框 我觉得我
  • AS3 中的 URL 编码变量?

    尝试通过传递变量时出现以下错误URLRequestMethod POST 错误 错误 2101 传递给 URLVariables decode 的字符串必须是包含名称 值对的 URL 编码查询字符串 有没有字符串 URL 编码的方法 Act
  • 如何根据背景图像而不是窗口浏览器来定位图像

    我以前问过这个问题 但似乎没有人明白我在说什么 因为它是书面的 所以我现在只花了 2 分 12 秒 我在视频中说明了我的问题 视频链接 该问题的相关css代码 BackgroundImage position absolute width
  • 加快 Visual Studio 2005 中的编译速度

    对于主要包含 C 项目的解决方案 在 Visual Studio 2005 中加快编译时间的最佳方法是什么 除了预编译标头之外 还有许多其他事情可能会减慢您的速度 病毒检查软件 可能会对构建产生严重影响 如果您正在运行病毒检查程序 请尝试将
  • k-means 的时间复杂度是多少?

    我正在经历k means 维基百科页面 http en wikipedia org wiki K means clustering 根据算法 我认为复杂度是O n k i n 总元素 k 簇迭代次数 那么有人可以向我解释一下维基百科上的这个
  • 没有 pyvenv.cfg 文件

    我做了一个变量cfg waterot cfg然后创建一个新文件 waterot cfg 在 pycharm 中 这会自动生成一个pyvenv cfg文件 我不知道这是什么 我的代码出现错误 我删除了pyvenv cfg文件并更改自 cfg
  • getRootNav() 和 navCtrl() 方法之间的差异

    你能告诉我以下两种方法有什么区别吗 我应该在哪个时刻使用它 book ts this app getRootNav push FromBook bookId this data id this navCtrl push FromBook b