问题标签 [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 - 当从同一级别访问 Angular 中的应用程序时,服务中的数据不可用
我有一个与依赖注入有关的问题。我是 Angular 的新手,问题是,我试图将登录的用户数据存储在服务中,并在从 API 获取登录用户信息的应用程序组件中调用此服务。
当我尝试从/dashboard/*
任何后代链接访问该服务时,该服务的数据可用。但是当我尝试从/dashboard
I got访问这些数据时undefined
。
我观察到的问题是,在 URL 发生变化之前,来自服务的数据不会被加载。当有导航时,数据会被加载。
该服务已在app.module
.
app.module
-
app-routing.module
-
javascript - 使用 Injected Token 配置延迟加载的模块
考虑以下代码段。如何访问Environment
in提供的值forRoot
?有没有另一种方法可以让我做同样的事情?
MyLibraryModule
将在某些ENVIRONMENT
将被注入的应用程序中消耗。它将被延迟加载
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)
angular - 如何在 Angular 中应用依赖倒置原则?
让我们考虑以下场景:您在登录表单中有一个用于密码恢复的按钮,此操作会打开一个带有两个选项的模式:“通过 SMS 恢复”和“通过电子邮件恢复”,根据选择的选项,表单启用输入文本您输入电子邮件或手机和按钮以发送恢复请求。
在 Angular 中,您可以创建一个服务,该服务将所选方法作为参数,并根据该参数执行恢复密码的操作。但是,如果添加更多方法,则需要添加更多条件才能发出正确的请求。根据 SOLID 原则,您应该依赖抽象而不是细节,这就是为什么您可以执行以下操作:
和组件:
然后为了使用 SMS 实现,我应该在组件中定义一个提供程序:
或电子邮件:
然后调用该方法:this.recoveryRepository.recoveryPassword();
但是,如果表单中的恢复方法值是动态的,那么如何根据用户选择短信还是电子邮件选项来更改存储库实例?
一个简单的选择是在构造函数中注入服务:
但它违反了 SOLID 原则,如果我们想到更复杂的场景,我们可能必须更改组件中的许多内容。然后可能有一种工厂负责根据所选选项更改实例并使用 this.recoveryRepository.recoveryPassword(userId) 并仅依赖于抽象类
angular - 业力和茉莉花:如何在构造函数中使用@Inject InjectionToken 测试组件
我正在使用 Angular 10,在组件的构造函数中声明一些注入变量,并在单元测试文件中配置注入值,运行 ng test 时会出现以下错误:
我的 componentexample.ts 中的构造函数是:
我对 token.d.ts 的配置是:
我的单元测试 componentexample.spec.ts 是:
我已经阅读了有关 stackoverflow 的几篇文章,这是在测试环境中提供 injectionToken 的方法。但我没有运气。
难道我做错了什么?提前致谢。
angular - Angular TestBed.inject
我正在做角度单元测试。TestBed.inject(service) 是否创建服务的新实例?我一直假设 TestBed.configureTestingModule() 创建了服务,并且通过注入我们只是访问了所创建服务的引用。
angular - Angular 防护在注入服务之前实例化
我有一个 Angular guard
,它使用来自注入服务的数据来确定是否可以访问路由,如下所示:
服务,抽象了不重要的东西,看起来像这样:
这是控制台日志的序列:在守卫 ctor 中来自守卫:未定义在数据服务 ctor 数据到达:{...}
很明显,守卫在数据服务之前被实例化。我怎样才能防止这种情况?两者都在根目录中提供。
angular - angular/fire -- 6.1.5 版在 VIVO 浏览器中不工作
我正在尝试将 angular/fire 从 6.0.5 升级到 6.1.5,但对于 6.1.5 版,网页不会加载。请告知是否需要进行任何依赖性检查?
javascript - 角度编程导航 - 为什么路由器不在提供者数组中
在 Angular Dependency Injector 中,当我们注入 Type 时,我们会将它们包含在 providers 数组中(可能在@NgModule
装饰器或@Component
装饰器中。但是在以下实例中,当我们以编程方式导航时,我们将Router
实例注入构造函数,但我们不在 providers 数组中提供就像我们通常在 Angular Dependency Injector 中所做的那样。
这里与 Angular Dependency Injector 有什么不同?供您参考,我将附上两个代码
程序化导航 - 代码
Angular Dependency Injector 方式 - 代码
angular - 多个惰性模块中的惰性单例服务
我有一项服务,我想提供给 2 个惰性模块 - 但不是针对整个应用程序。
我通过带有 forRoot(): ModuleWithProviders 约定的模块提供服务到这 2 个惰性模块中 - 这会导致 2 个服务实例。如果我在 app.module 中使用 forRoot,我可以在惰性模块中使用 forChild,但随后会为整个应用程序加载服务。
是否可以仅加载延迟模块的服务并仍然将其作为单例?