问题标签 [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 投票
0 回答
230 浏览

angular - 在 provider 中传递字符串值并将值传递给 Base Service 的 super

我正在创建一个通用的 crud 服务,我想在我的 Angular 应用程序中的各种功能模块中使用它。

为了实现这一点,我需要将一个字符串值传递给提供者中的服务:一个角度模块,这样我就可以为基础服务的超级设置一个值。这可能吗?

配置

模块

通用服务

0 投票
1 回答
300 浏览

angular - 使用未在任何地方注入的角度服务

假设您有一个 Angular 服务 ( ZombieService),例如,它监视另一个服务。而且,ZombieService没有注入任何地方DEMO

问题是,当您不在任何地方注入服务时,该服务将被完全忽略(不执行)。解决方案是将其注入,例如,AppComponent

虽然这可行,但我想知道是否没有更好的解决方案。有什么建议么?

0 投票
1 回答
419 浏览

angular - Angular 更新 8.1 - 循环依赖警告

自从更新到 Angular 8.1(8.0 有效)后,我收到了一个循环依赖警告,这对我来说真的没有意义。

我有SelectService一些组件中提供的可注入服务。该服务正在使用一个类SelectableItem。创建此类的实例时,服务本身作为参数传递。

该类SelectableItem不是可注入的,看起来像这样。

现在自从 8.1 更新以来,我收到一个循环依赖警告:

可选项目.ts -> select.service.ts -> 可选项目.ts

SelectableItem不是服务,怎么可能是循环依赖?

0 投票
1 回答
26 浏览

angular - Angular - 为根提供者提供异步

我的目标是加载一个配置文件(来自资产),其中包括我的 http 服务所需的设置。目前我有一个APP_INITIALIZER服务,它加载文件并将其设置在服务属性中。问题是,http 服务是providedIn: 'root'并且 Angular 在加载配置之前构建它,这导致在undefined尝试访问“已保存”配置时得到一个。

如何确保在构建这些服务之前加载配置?

谢谢。

0 投票
4 回答
10155 浏览

angular - Angular:收集的元数据包含将在运行时报告的错误:不支持 Lambda

在我的 Angular 应用程序中,我试图在我的模块中使用工厂提供程序:

但这失败了:

为导出的符号“MyModule”生成的元数据中遇到错误:

收集的元数据包含将在运行时报告的错误:不支持 Lambda

0 投票
3 回答
478 浏览

angular - 何时通过依赖注入创建服务

我有一个角度服务,在其构造函数中包含一些初始化代码。这段代码是什么时候调用的,即服务是什么时候创建的?

  • 已经在某个模块中提供了服务?
  • 或者直到第一个组件注入它?
0 投票
2 回答
3546 浏览

angular - 如何将服务注入角度常数

我正在尝试以角度导出一个常量,我需要设置一个键,其值将从服务返回。我尝试使用以下代码:

这是我的 user-config.ts 文件:

这是我想要注入的 UserService 文件:

我无法解决这个问题。需要帮忙。

0 投票
1 回答
926 浏览

angular - 如何将父组件服务注入Angular中的动态组件?

我正在使用 Angular 8,并且我已经动态创建了组件。我将带有服务的父组件放入提供者数组中。如何将相同的父实例注入MyService动态组件?如果没有动态组件,我可以通过注入该服务的子组件的构造函数来实现它。但是我如何使用动态组件来做到这一点?这是创建动态组件的代码

0 投票
2 回答
1596 浏览

angular - Angular 将组件注入到属性指令中

Tl;dr:我如何提供一个可见组件作为指令的依赖项?自然,组件必须在指令之前进行初始化,但它必须与应用程序稍后在selector组件上运行时显示的实例相同。


细节:

我的 app.component.html 的结构如下:

app.component.html

顶部有一个导航栏,始终可见。<router-outlet>始终显示当前活动的组件。

我现在想允许在 中呈现的组件<router-outlet>修改导航栏的内容,例如显示适合当前活动组件的附加按钮。这应该与指令一起使用,如下所示:

some.component.html

附加按钮现在应该出现在顶部的导航栏中。

appTopBar指令如下所示:

顶栏.directive.ts

该指令依赖于 NavigationComponent 并且可以通过公开提供的方法将内容传递给导航栏setTopBarContent()

导航.component.ts

我遇到的第一个问题是,在NavigationComponent初始化 TopBarDirective 时,依赖项还不可用。我收到以下错误:

错误错误:未捕获(承诺):NullInjectorError:

StaticInjectorError(AppModule)[TopBarDirective -> NavigationComponent]: StaticInjectorError(Platform: core)[TopBarDirective -> NavigationComponent]:

NullInjectorError:没有导航组件的提供者!

所以显然组件在指​​令之后被初始化并且还不可用。

我尝试将其添加NavigationComponentproviders数组中,AppComponent并且依赖注入现在起作用了:

但是,现在似乎有两个 NavigationComponent 实例。我通过在其中生成一个随机数并记录它constructor来检查这一点。NavigationComponent该指令肯定有一个与<app-navigation>选择器上显示的实例不同的实例。

现在我知道这种模式以某种方式起作用。前段时间我发现它是由一些 Angular 开发人员介绍的,但不幸的是我不再有源代码了。但是,工作版本显示 中的内容AppComponent,因此该指令仅具有对 的依赖AppComponent项,这似乎首先被初始化。因此,不会发生整个依赖性问题。

如何确保NavigationComponent提供给 的 TopBarDirective实例与选择器中显示的实例相同<app-navigation>

0 投票
1 回答
721 浏览

angular - Angular 8将管道注入另一个管道不起作用

从 Angular 7 升级到 Angular 8 后,我的管道停止工作并出现错误:

或有类似错误:

我的管道代码:

我是否必须@Injectable()在 Angular8 中明确标记管道,或者有什么问题?