NullInjectorError:R3InjectorError(AppModule)[路由器 - >路由器 - >路由器]:NullInjectorError:没有路由器的提供者

2023-11-24

我有一个已发布的库,其中包含一个在其模板中使用 [routerLink] 的组件。在我的应用程序中安装库后,出现错误NullInjectorError:R3InjectorError(AppModule)[路由器->路由器->路由器]: NullInjectorError:没有路由器提供者!

在库的模块中,RouterModule 被导入,如下所示:

@NgModule({
  declarations: [
    Component
  ],
  exports: [
    Component
  ],
  imports: [
    CommonModule,
    RouterModule,
    TranslateModule
  ]
})
export class LibWithComponentModule {
}

在我的应用程序中,RouterModule 配置如下:

const routes: Routes = [{
  path: '',
  component: RootComponent
}];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

The app.module.ts看起来像这样:

  declarations: [
    AppComponent,
    RootComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    LibWithComponentModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

但我想会提供 RouterModule 吗?我究竟做错了什么?


我在我正在开发的一个大型应用程序中遇到了与您描述的完全相同的场景。我的主应用程序导入一个已发布的 npm 组件包,其中包含一个利用routerLink指示。运行应用程序时,我遇到了同样的情况R3InjectorError你提到,尽管RouterModule肯定会正确导入到所有需要它的模块中。

在我的例子中,问题的根本原因是这个 npm 包明确列出了@angular/router作为其中之一dependencies代替peerDependency(对于图书馆来说应该是这样)。这意味着@angular/router将同时安装在您的node_modules,以及在node_modules/LIBRARY/node_modules!

发生的情况是,在运行时,RouterModule您发布的组件使用了不同的InjectionTokenRouterModule您的应用程序使用提供RouterModule.forRoot()。发布的组件的RouterModule指的是node_modules/LIBRARY_NAME/node_modules/@angular/router,而主应用程序已经提供了node_modules/@angular/router.

所以结论是:修复方法是不明确地有任何@angular在您的库中列出的软件包作为dependency,但正确地将它们标记为peerDependency。这是有趣的读物管理依赖关系ng-packagr文档。

供参考:我不确定这是否完全与 Ivy 相关,但在我的场景中,我运行的是启用了 Ivy 的 Angular 11。

在这种情况下,错误消息肯定非常令人困惑,因为注入的服务被命名为Router两次,即使它们引用不同的实例。

希望这也能解决您的问题,我花了很长时间来解决这个问题!

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

NullInjectorError:R3InjectorError(AppModule)[路由器 - >路由器 - >路由器]:NullInjectorError:没有路由器的提供者 的相关文章

  • Angular http 返回状态 0,但我期望 404

    我正在向具有以下路由的服务器发出请求 app use 401 req res gt res status 401 end app use 403 req res gt res status 403 end app use 404 req r
  • Angular 2 RC 4“(SystemJS)无法解析[对象位置]的所有参数:”在 IE 11 中

    我的 Web 应用程序在 Chrome Firefox 和 Edge 中运行良好 但在 IE 11 中当然不行 旧版本的 IE 可能也没有 这是一个使用 Angular Cli 生成应用程序的最小应用程序 完整错误 EXCEPTION Ca
  • 传递多个参数或对象(单击)

    问题是将对象或多个参数从模板传递到组件 并使用它们将数据添加到 API 任务 service ts addTasks task Task Observable
  • 在 Angular 5 中使用 jquery 插件

    我正在尝试在 Angular 5 项目中使用以下日期选择器 但我不确定如何导入它 https bootstrap datepicker readthedocs io en latest index html https bootstrap
  • Jhipster 生成器跳过 --skip-server 处的身份验证代码

    为什么当我们使用 skip server 生成项目时 哟 jhipster skip server 部分身份验证丢失 在 AJS A2 上 是吗 每次我需要粘贴部分代码 Angular 上的 AuthServerProvider 或 Ang
  • 如何导航到 Angular 7 中的锚点

    我已经在routingModule和所有路径中启用了anchorScrolling 但是当我单击链接时没有任何反应 nav bar component html div class sidenav a href class closeBtn
  • router.navigate 不起作用(Angular6,延迟加载)

    我是 Angular 4 的新手 目前使用 v 6 我一直在尝试使用this router navigate 登陆 从登录组件重定向到登陆组件的功能 它无法正常工作 它将显示登录页面一秒钟 然后再次重定向回登录页面 但是 例如 如果我尝试浏
  • rxjs 主题应该在课堂上公开吗?

    假设我有两个类 您可以在其中观察一些可观察量 第一个例子 公共主题 class EventsPub public readonly onEnd new Subject
  • 以嵌套反应形式使用 setControl

    我想知道当我在另一个 formBuilder 组中有一个数组时 我必须做什么才能以反应形式使用 setControl 和 get 例如 this formulario this formBuilder group title this ra
  • angular2 rc5 路由器服务单例

    我最近迁移到 Angular 2 RC 5 并将应用程序中的子模块转换为 NgModule 鉴于以下情况plunker https angular io resources live examples router ts plnkr htm
  • 使用占位符和 ngModel 动态生成输入元素

    我想以角度 2 动态生成输入元素 我有占位符标题数组和值数组 如下所示 在我的组件中 我有两个映射 如下所示 其中两个映射的键相同 将值映射到标题 const placeholderMap fullName Name value Produ
  • 打字稿中枚举声明中的方括号的含义是什么?

    我正在浏览一个名为 Angular ngrx 项目的打字稿文件collection ts在那里 我看到声明了以下枚举常量 import Action from ngrx store import Book from models book
  • Winui 3 中的 WebView2:如何加载嵌套在应用程序中的本地 HTML 文件

    我正在寻找一种用某种 Windows 应用程序包装我的 Ionic Angular 应用程序的方法 我正在研究 Electron 并且有问题 但也在调查我是否刚刚创建了自己的 WinUI3 应用程序并使用了 Webview2 虽然这是 Io
  • Typescript导入别名+桶文件

    我最近花了很多时间 因为 Angular ngrx typescript 生态系统中某些事物的特定行为 并且我无法识别可能的根本原因 场景 我已经构建了一些效果 并将它们导出到桶文件中 index ts import MyEffects f
  • cordova-plugin-geolocation watchPosition() 方法不起作用

    我正在开发 Ionic2 Angular2 Typescript 应用程序 我正在尝试使用 Cordova 的 Geolocation 插件 但是当我像这样调用 watchPosition 方法时http ionicframework co
  • 当可观察值可用时,UI 不会自动更新

    在 angular2 中 我创建了可观察的 uploadProgressStatus 它接受数字 使用异步管道 我想在 UI 上显示数字 并在输入新值时自动更新 请参阅下面的代码 home component ts 正在观察 upload
  • Angular2 中自定义指令和组件之间的通信

    我有一个模板 其中包含文本框 一个 span 标签和一个 div 标签 div 标签具有 selectedColor 自定义指令 我想在输入值更改时更改 span 和 div 标签的背景颜色 所以最后我希望我的指令对输入更改做出反应并设置
  • 应用程序 Angular2 外部的路由

    我在 Angular2 中有一个应用程序 我需要在应用程序外部导航 我有简单的看法 a target blank library url a 我想导航到library url 我有导航方法 goToPage url string What
  • 角度检测更改不适用于子组件

    编辑 我只是不知道为什么 但更改检测停止在层次结构中的第一个子级 如果我手动调用更深一层的更改检测 在sch job detail 然后更新值 我已经建立了一个MatTable具有可扩展的行 可扩展 行部分如下
  • 从 Angular2 模块导出时遇到问题

    我是 Angular 2 的初学者 我试图了解如何从功能模块导出类 并将其导入到我的主模块中 当我尝试在打字稿中编译它时 我收到以下两个错误 app app component ts 11 21 错误 TS2304 找不到名称 添加服务 a

随机推荐

  • 添加事件监听器到事件监听器添加的表单元素

    我正在构建一个 Symfony 应用程序 并使用表单事件和一些 jquery ajax 来完成整个 状态 地点 的事情 不过 我有一个小问题 我使用的格式是省 gt 城市 gt 郊区 现在 据我所知 我的代码很好 但是当执行到达我向 城市
  • 使用 twig 和 Slim 框架上传文件(版本 2)- PHP

    我正在使用 UserFrosting 一个用户管理系统 但在通过表单发布上传文件时遇到一些问题 这就是我尝试过的 这就是我的树枝文件的样子
  • 如何并行等待多个阻塞队列?

    我有两个独立的阻塞队列 客户端通常使用第一个或第二个阻塞队列来检索要处理的元素 在某些情况下 客户端对两个阻塞队列中的元素感兴趣 无论哪个队列首先提供数据 客户端如何并行等待两个队列 您可以尝试使用poll某种循环中的方法 仅在轮询另一个队
  • 可选实体框架复杂类型所需的属性

    我想定义 Required 实体框架中复杂类型的属性 例如 我有一个Customer具有可选实体Address 地址实体有一个必需的PostCode财产 ComplexType public class Address public str
  • 如何在java eclipse中将其他maven项目的依赖添加到我当前的maven项目中?

    我想在我的maven项目1中使用maven项目2类 这样我就可以将它用作父类 你能告诉我如何使用 eclipse 和 JAVA 来做到这一点吗 请写下逐步导航 因为我是 Maven 新手 提前致谢 我知道为时已晚但这可以帮助其他正在寻找同样
  • Excel VBA高效获取文件名函数

    我需要使用 Excel 2010 中的 VBA 从远程服务器上的文件夹中获取文件名集合 我有一个可以工作的函数 并且在大多数情况下它可以完成这项工作 但是远程服务器经常出现糟糕的情况 terrible网络性能问题 这意味着循环遍历 300
  • 异常处理指南 - Python 与 Java

    我是原始的 Java 开发人员 对我来说 Java 中的检查异常显然 很容易让我决定捕获它或将其扔给调用者稍后处理 然后是Python 没有受检查的异常 所以从概念上讲 没有什么会强迫你处理任何事情 根据我的经验 如果不检查文档 你甚至不知
  • 获取backstack中最新的fragment

    如何获取添加到 backstack 中的最新片段实例 如果我不知道片段标签和 id FragmentManager fragManager activity getSupportFragmentManager FragmentTransac
  • Android:如何制作 GroupBox 小部件?

    Android 似乎没有提供如此有用的小部件 但是 我的屏幕设计需要这样的视图 此外 交互设计要求根据其他数据显示和隐藏此类框 当然 我可以从 XML 布局中的单独元素 例如 从其上的形状和文本视图 构造这样的框 但管理它们的可见性会变得很
  • PhpMyAdmin 错误:令牌不匹配

    我最近在 xampp 上的 apache 上安装的本地安装中遇到错误 我正在运行 phpmyadmin v4 0 5 错误描述为错误 令牌不匹配 有其他人经历过这个并找到解决办法吗 您可以尝试以下方法 找到 XAMPP php ini 文件
  • 在 RMarkdown 的输出中显示代码块名称

    正如 RMarkdown 中所知 代码块可以这样命名 r chunkname plot x y 是否可以在输出文档中显示块名称 您可以使用knitr opts current get label example r cars library
  • 什么 Java 数据类型对应于 Oracle SQL 数据类型 NUMERIC?

    Oracle JDBC 驱动程序将什么 Java 数据类型分配给 Oracle SQL 数据类型NUMERIC 这会随着尺寸的变化而变化吗NUMERIC type 正如其他人已经说过的 驱动程序将所有内容映射到 BigDecimal 即使它
  • macOS 上的 Clang 无法从 ncurses 链接 lmenu

    我是使用 ncurses 库的新手 所以我一直在尝试重新创建此页面上的一些示例 http www tldp org HOWTO NCURSES Programming HOWTO index html 我已经获得了有关创建菜单的部分 特别是
  • 我想找到填充或搜索,猫鼬

    我的模型代码 var user mongoose Schema email password name company position phoneNumber signDate Date friends type mongoose Sch
  • 如何读取 Python 请求的响应?

    我有两个 Python 脚本 一个使用的是urllib2库一个使用请求库 我发现 Requests 更容易实现 但我找不到 urlib2 的等效项read 功能 例如 response url urlopen req print respo
  • 为什么 Linux 内核中没有零拷贝网络? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我想知道为什么linux内核 或任何其他主流操作系统 没有零拷贝网络功能的原因 我所说的零复制是指 数据包 数据流不会被复制以传递到用户空间中的应用程序 但例如使用内存池类型的分配器在内核
  • C++11 和 C++03 在对 std::string 小字符串优化的支持方面有所不同?

    在C 11标准的兼容性附录中 C 03到C 11的变化之一描述如下 C 2 11 第 21 条 字符串库 21 4 1 Change 放宽 basic string 失效规则 基本原理 允许小字符串优化 对原始特征的影响 可以执行有效的 C
  • 如何在 Three.js 中覆盖 GLTF 材质

    我正在尝试创建一种动态方式来在 Three js 中的 gltf 导入模型上显示太阳能数据 目的是将不同的纯色与模型的不同部分相关联 并能够关闭和打开它们 我当前的障碍是改变 gltf 中材质的颜色 我尝试使用 ObjLoader 来代替
  • CSS - 是否可以在父元素中选择多个不同的子元素而不重复父元素?

    我整个下午都在研究 CSS 选择器 试图找到这个问题的答案 因为它看起来很简单 但我一生都找不到任何解决方案 给定类似于以下的结构 div div
  • NullInjectorError:R3InjectorError(AppModule)[路由器 - >路由器 - >路由器]:NullInjectorError:没有路由器的提供者

    我有一个已发布的库 其中包含一个在其模板中使用 routerLink 的组件 在我的应用程序中安装库后 出现错误NullInjectorError R3InjectorError AppModule 路由器 gt 路由器 gt 路由器 Nu