问题标签 [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.
angular - 在 provider 中传递字符串值并将值传递给 Base Service 的 super
我正在创建一个通用的 crud 服务,我想在我的 Angular 应用程序中的各种功能模块中使用它。
为了实现这一点,我需要将一个字符串值传递给提供者中的服务:一个角度模块,这样我就可以为基础服务的超级设置一个值。这可能吗?
配置
模块
通用服务
angular - 使用未在任何地方注入的角度服务
假设您有一个 Angular 服务 ( ZombieService
),例如,它监视另一个服务。而且,ZombieService
没有注入任何地方DEMO
问题是,当您不在任何地方注入服务时,该服务将被完全忽略(不执行)。解决方案是将其注入,例如,AppComponent
虽然这可行,但我想知道是否没有更好的解决方案。有什么建议么?
angular - Angular 更新 8.1 - 循环依赖警告
自从更新到 Angular 8.1(8.0 有效)后,我收到了一个循环依赖警告,这对我来说真的没有意义。
我有SelectService
一些组件中提供的可注入服务。该服务正在使用一个类SelectableItem
。创建此类的实例时,服务本身作为参数传递。
该类SelectableItem
不是可注入的,看起来像这样。
现在自从 8.1 更新以来,我收到一个循环依赖警告:
可选项目.ts -> select.service.ts -> 可选项目.ts
SelectableItem
不是服务,怎么可能是循环依赖?
angular - Angular - 为根提供者提供异步
我的目标是加载一个配置文件(来自资产),其中包括我的 http 服务所需的设置。目前我有一个APP_INITIALIZER
服务,它加载文件并将其设置在服务属性中。问题是,http 服务是providedIn: 'root'
并且 Angular 在加载配置之前构建它,这导致在undefined
尝试访问“已保存”配置时得到一个。
如何确保在构建这些服务之前加载配置?
谢谢。
angular - Angular:收集的元数据包含将在运行时报告的错误:不支持 Lambda
在我的 Angular 应用程序中,我试图在我的模块中使用工厂提供程序:
但这失败了:
为导出的符号“MyModule”生成的元数据中遇到错误:
收集的元数据包含将在运行时报告的错误:不支持 Lambda
angular - 何时通过依赖注入创建服务
我有一个角度服务,在其构造函数中包含一些初始化代码。这段代码是什么时候调用的,即服务是什么时候创建的?
- 已经在某个模块中提供了服务?
- 或者直到第一个组件注入它?
angular - 如何将服务注入角度常数
我正在尝试以角度导出一个常量,我需要设置一个键,其值将从服务返回。我尝试使用以下代码:
这是我的 user-config.ts 文件:
这是我想要注入的 UserService 文件:
我无法解决这个问题。需要帮忙。
angular - 如何将父组件服务注入Angular中的动态组件?
我正在使用 Angular 8,并且我已经动态创建了组件。我将带有服务的父组件放入提供者数组中。如何将相同的父实例注入MyService
动态组件?如果没有动态组件,我可以通过注入该服务的子组件的构造函数来实现它。但是我如何使用动态组件来做到这一点?这是创建动态组件的代码
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:没有导航组件的提供者!
所以显然组件在指令之后被初始化并且还不可用。
我尝试将其添加NavigationComponent
到providers
数组中,AppComponent
并且依赖注入现在起作用了:
但是,现在似乎有两个 NavigationComponent 实例。我通过在其中生成一个随机数并记录它constructor
来检查这一点。NavigationComponent
该指令肯定有一个与<app-navigation>
选择器上显示的实例不同的实例。
现在我知道这种模式以某种方式起作用。前段时间我发现它是由一些 Angular 开发人员介绍的,但不幸的是我不再有源代码了。但是,工作版本显示 中的内容AppComponent
,因此该指令仅具有对 的依赖AppComponent
项,这似乎首先被初始化。因此,不会发生整个依赖性问题。
如何确保NavigationComponent
提供给 的 TopBarDirective
实例与选择器中显示的实例相同<app-navigation>
?
angular - Angular 8将管道注入另一个管道不起作用
从 Angular 7 升级到 Angular 8 后,我的管道停止工作并出现错误:
或有类似错误:
我的管道代码:
我是否必须@Injectable()
在 Angular8 中明确标记管道,或者有什么问题?