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

angular - 当从同一级别访问 Angular 中的应用程序时,服务中的数据不可用

我有一个与依赖注入有关的问题。我是 Angular 的新手,问题是,我试图将登录的用户数据存储在服务中,并在从 API 获取登录用户信息的应用程序组件中调用此服务。

当我尝试从/dashboard/*任何后代链接访问该服务时,该服务的数据可用。但是当我尝试从/dashboardI got访问这些数据时undefined

我观察到的问题是,在 URL 发生变化之前,来自服务的数据不会被加载。当有导航时,数据会被加载。

该服务已在app.module.

app.module-

app-routing.module-

0 投票
0 回答
100 浏览

javascript - 使用 Injected Token 配置延迟加载的模块

考虑以下代码段。如何访问Environmentin提供的值forRoot?有没有另一种方法可以让我做同样的事情?

MyLibraryModule将在某些ENVIRONMENT将被注入的应用程序中消耗。它将被延迟加载

0 投票
0 回答
65 浏览

javascript - 与 Angular 10 深度相等的 2.0.5 库集成

我正在尝试将最新版本的 deep-equal 与角度应用程序(v10)集成。我在 package.json 中添加了 deep-equal 版本 2.0.5 作为“依赖项”(假设这个库依赖于其他库,npm 将自动下载所需的依赖项)。还将 @types/deep-equal 添加到 package.json 文件中。

为了使用 deep-equal,我在 Angular.json 的 Scripts 数组中添加了 node_modules 路径:

当我将 deep-equal 导入到我的角度服务以通过以下方式使用该方法时:

但没有运气。

我的角度应用程序开始给出错误,因为需要并且未定义全局(来自 deep-equal 库的 index.js 文件)。

让我知道我是否缺少任何东西,或者我是否需要添加其他库作为依赖项。我没有明确添加 require 作为依赖项,因为 Angular 有自己的依赖注入框架。

PS:与我的问题相关的以下 SO 链接不能解决问题,因为它使用 deep-equal ver 1.0.1 并且我正在尝试使用最新版本: 如何使用 deep-equal (Angular 7)

0 投票
0 回答
145 浏览

angular - 如何在 Angular 中应用依赖倒置原则?

让我们考虑以下场景:您在登录表单中有一个用于密码恢复的按钮,此操作会打开一个带有两个选项的模式:“通过 SMS 恢复”和“通过电子邮件恢复”,根据选择的选项,表单启用输入文本您输入电子邮件或手机和按钮以发送恢复请求。

在 Angular 中,您可以创建一个服务,该服务将所选方法作为参数,并根据该参数执行恢复密码的操作。但是,如果添加更多方法,则需要添加更多条件才能发出正确的请求。根据 SOLID 原则,您应该依赖抽象而不是细节,这就是为什么您可以执行以下操作:

和组件:

然后为了使用 SMS 实现,我应该在组件中定义一个提供程序:

或电子邮件:

然后调用该方法:this.recoveryRepository.recoveryPassword();

但是,如果表单中的恢复方法值是动态的,那么如何根据用户选择短信还是电子邮件选项来更改存储库实例?

一个简单的选择是在构造函数中注入服务:

但它违反了 SOLID 原则,如果我们想到更复杂的场景,我们可能必须更改组件中的许多内容。然后可能有一种工厂负责根据所选选项更改实例并使用 this.recoveryRepository.recoveryPassword(userId) 并仅依赖于抽象类

0 投票
0 回答
124 浏览

angular - 业力和茉莉花:如何在构造函数中使用@Inject InjectionToken 测试组件

我正在使用 Angular 10,在组件的构造函数中声明一些注入变量,并在单元测试文件中配置注入值,运行 ng test 时会出现以下错误:

我的 componentexample.ts 中的构造函数是:

我对 token.d.ts 的配置是:

我的单元测试 componentexample.spec.ts 是:

我已经阅读了有关 stackoverflow 的几篇文章,这是在测试环境中提供 injectionToken 的方法。但我没有运气。

难道我做错了什么?提前致谢。

0 投票
1 回答
666 浏览

angular - Angular TestBed.inject

我正在做角度单元测试。TestBed.inject(service) 是否创建服务的新实例?我一直假设 TestBed.configureTestingModule() 创建了服务,并且通过注入我们只是访问了所创建服务的引用。

0 投票
0 回答
47 浏览

angular - Angular 防护在注入服务之前实例化

我有一个 Angular guard,它使用来自注入服务的数据来确定是否可以访问路由,如下所示:

服务,抽象了不重要的东西,看起来像这样:

这是控制台日志的序列:在守卫 ctor 中来自守卫:未定义在数据服务 ctor 数据到达:{...}

很明显,守卫在数据服务之前被实例化。我怎样才能防止这种情况?两者都在根目录中提供。

0 投票
0 回答
24 浏览

angular - angular/fire -- 6.1.5 版在 VIVO 浏览器中不工作

我正在尝试将 angular/fire 从 6.0.5 升级到 6.1.5,但对于 6.1.5 版,网页不会加载。请告知是否需要进行任何依赖性检查?

0 投票
1 回答
52 浏览

javascript - 角度编程导航 - 为什么路由器不在提供者数组中

在 Angular Dependency Injector 中,当我们注入 Type 时,我们会将它们包含在 providers 数组中(可能在@NgModule装饰器或@Component装饰器中。但是在以下实例中,当我们以编程方式导航时,我们将Router实例注入构造函数,但我们不在 providers 数组中提供就像我们通常在 Angular Dependency Injector 中所做的那样。

这里与 Angular Dependency Injector 有什么不同?供您参考,我将附上两个代码

程序化导航 - 代码

Angular Dependency Injector 方式 - 代码

0 投票
0 回答
34 浏览

angular - 多个惰性模块中的惰性单例服务

我有一项服务,我想提供给 2 个惰性模块 - 但不是针对整个应用程序。

我通过带有 forRoot(): ModuleWithProviders 约定的模块提供服务到这 2 个惰性模块中 - 这会导致 2 个服务实例。如果我在 app.module 中使用 forRoot,我可以在惰性模块中使用 forChild,但随后会为整个应用程序加载服务。

是否可以仅加载延迟模块的服务并仍然将其作为单例?