问题标签 [angular-dependency-injection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
35819 浏览

angular - APP_INITIALIZER 与正在重定向的自定义 Http 提供程序一起使用时引发“无法实例化循环依赖!ApplicationRef_”

我正在使用自定义 Http 提供程序来处理 API 身份验证错误。在我的 CustomHttp 中,当 API 发出 401 状态错误时,我需要将用户重定向到登录页面。这很好用!

app.module.ts

自定义-http.ts

然后,我尝试使用APP_INITIALIZER不透明令牌来获取初始化我的应用程序所需的设置。

app.module.ts

配置服务.ts

这会产生一个错误:

如果我注释掉自定义 Http 提供程序,则不会显示错误并且APP_INITIALIZER按预期工作。如果我Router从 Http 提供程序 deps 声明中删除,我不再有错误,但我的ConfigService.load()函数被调用了两次。

有谁知道为什么这个路由器依赖导致这个循环依赖错误?如何防止我的ConfigService.load()函数被调用两次?

如果需要,我创建了一个重现错误的公共存储库:https ://github.com/haia212/AngularErrorTestProject

0 投票
2 回答
169 浏览

javascript - 在Angular 2中将服务注入服务时出现无效的提供者错误

我目前有一个如下所示的模块设置(摘录);

我已将 my AuthService(负责处理用户身份验证并提供确定当前用户是否经过身份验证的方法)定义为 my 中的提供程序AuthModule

我可以在其同级中毫无问题地使用此服务LoginFormComponent。但是,当我尝试AuthServiceAuthRouteGuard类中使用RoutingModule时,出现以下错误;

AuthModuleRoutingModule. 一旦AuthService被定义为AuthRouteGuard;的依赖项,就会发生上述错误。

我在这里遗漏了什么,为什么在构造函数中注入服务会导致无效的提供程序错误,而该错误在删除该注入时不会发生?

编辑authHttpServiceProvider- 如果完全删除提供程序,则会发生相同的错误,因此AuthModule模块看起来像;

0 投票
1 回答
3745 浏览

angular - @Injectable(providedIn: 'root') 的语义?

只是想确保我理解@Injectable(providedIn: 'root'). 在 Angular 6 之前,如果我们从 NPM 导入一个包含服务的模块,我们将在我们的应用程序模块中声明该模块,以便整个应用程序都可以访问该服务。像这样的东西:

现在我们可以注入SomeService模块提供的,因为我们已经导入了模块。SomeNPModule在Angular 6 中,不需要导入),AppModule因为我们@Injectable(providedIn: 'root在服务本身上使用 ),并且当注解运行时,它会自动使服务在root注入容器中可用?

更新

所以我们有了答案,但我认为它是部分完成的,如果我们想要配置服务,这通常是通过forRoot服务模块上的方法完成的......就像通过Router. 所以假设我们不想配置服务,我们需要做的就是注入它,但是如果我们想要一个配置的服务,我们需要遵循Router模式。如果我在评论中犯了任何错误,请纠正我。

0 投票
2 回答
6316 浏览

angular - Angular 6. 是否可以按条件注入服务?

在我的角度应用程序(使用角度材料)中,我有一个过滤器面板,除了选择之外,我还希望能够进行自动完成(用户输入值并将其发送到后端,由此 $regexp 查询我们在 MongoDB 集合中找到匹配项)。但要做到这一点,我需要手动将服务注入过滤器组件。我没有找到有关如何执行此操作的任何信息。

我需要这样的东西:

可能吗?谢谢。

0 投票
1 回答
2152 浏览

angular - 无法将 `Route` 和 `ActivatedRouteSnapshot` 注入 `HttpInterceptor`

代码的简化版本:

这些都无法解决。它失败并显示以下标准消息:

StaticInjectorError(AppModule)[InjectionToken HTTP_INTERCEPTORS -> ActivatedRouteSnapshot]:StaticInjectorError(平台:核心)[InjectionToken HTTP_INTERCEPTORS -> ActivatedRouteSnapshot]:NullInjectorError:没有ActivatedRouteSnapshot的提供者!

RouterModule..导入应用程序的正确方法是什么?

PS我得到SharedModule而不是AppModule导出所有的东西,但不是Angular的:

AppModule

0 投票
1 回答
1717 浏览

angular - 如何覆盖注入到角度组件的服务

我们正在使用 Angular 构建一个 cms 驱动的应用程序框架。我们提供多个包,客户可以使用这些包来进一步定制用户界面或逻辑。出于这个原因,组件会将其逻辑委托给服务,目标客户可以提供自定义服务(我们正在避免组件继承)。

组件是动态放置的,并使用唯一的数据集进行初始化,保存 CMS 数据。提供的服务将从组件注入器继承此数据。这很好用,但是,当提供自定义服务(使用InjectionToken)时,我们面临 2 个问题:

  1. 服务不再是非单例的,多个组件实例将提供同一个自定义服务
  2. 该服务将不再从组件继承数据值,因为它被注入到不同的范围内

还有其他人遇到过类似的架构挑战吗?

0 投票
2 回答
3579 浏览

angular - 无法解析 ApplicationModule 的参数:(?)

对Angular来说很新。我的应用程序包含 1 个服务和 3 个组件。编译成功。我收到此错误,不知道出了什么问题:

未捕获的错误:无法解析 ApplicationModule 的所有参数:(?)。

调试给了我很少的想法。似乎这个问题与具有空依赖项的 NSLocaleLocalizations 有关(如果这有意义的话) - 请参见下面的屏幕截图: 在此处输入图像描述

这是一些代码:如果需要其他任何内容,请告诉我。非常感谢您的帮助 - 非常感谢您。

包.json

}

app.module.ts

应用程序路由.module.ts

故事服务.ts

}

故事.component.ts

story.component.ts

stage.component.ts

0 投票
1 回答
667 浏览

angular - Angular Universal,如何将带有声明的模块与服务器端执行隔离开来?

我已经安装了ng2-pdf-viewer以在 Angular 6 应用程序中显示文档。

为了使它工作,我需要FeatureModule在我想使用<ng2-pdf-viewer>组件的地方导入 PdfViewerModule。

问题在于PdfViewerModule,它在其函数中调用 Element 和 Window 对象,并且在服务时会崩溃node server.js

目前我的模块是这样导入的:

通常我可以通过将此类特定模块直接导入BrowserModule并提供ServerModule一些自定义创建的模拟模块来解决此类问题,这些模块可能声明同名<ng2-pdf-viewer>模拟。我想到的解决方案是直接导入PdfViewerModule进来BrowserModule,像这样:

但在这种情况下,FeatureModule无法<ng2-pdf-viewer>在其模板中访问组件,因为它没有被声明。

有没有办法PdfViewerModule与服务器端执行隔离,但保留其声明?也许在这种情况下有绝对不同的方法?

先感谢您!:)

0 投票
1 回答
725 浏览

angular - 如何将服务注入必须在 Angular 7 中的应用程序模块中实例化的类中?

我在一个项目中使用 ngxs,我想使用 ngxs 记录器插件,但我想覆盖记录器本身,以便能够登录到后端。为此,我需要在我的记录器类中注入我的 RestService,但我无法这样做。我看到了多个问题,询问如何将服务注入普通类,但这些情况并不能真正回答您必须在应用程序模块中手动实例化类的情况。这个这个这个都是这样的答案,这些答案对我没有帮助,或者我没有掌握他们的知识。

这是我的应用程序模块导入中的内容:

这是我的记录器类:

我不能直接传递休息服务的实例,因为我必须传递一连串的依赖关系。我也尝试使用注入令牌并添加{ provide: LOGGER_INJECTION_TOKEN, useClass: RestService }到提供程序,但我达到了同样的目的。我不知道如何Logger在不必传递这些我没有的参数的情况下实例化该类。

这甚至可能吗?如果没有,我该怎么做?我希望能够使用 ngxs 记录器来存储操作日志,而不是在组件中创建自定义日志记录,但为此我需要记录器能够使用我的休息服务。

0 投票
2 回答
52 浏览

angular - 无法在angular4中注入依赖注入

我有一个像这样的课程

我已经像这样在 NgModule 中注册了这个类

现在,当我尝试像这样访问课程时

我收到以下错误

未捕获的错误:无法解析 moviindustry 的所有参数:(?)。在 syntaxError (compiler.es5.js:1694)

根据文档, Injectable() 用于为类注入依赖注入,那为什么我不能使用它呢?具有讽刺意味的是,当我在构造函数中使用 http 时,我的应用程序被编译,有人可以帮助我理解这一点

笔记:

我也不能这样使用