问题标签 [angular2-providers]

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 回答
1993 浏览

angular - Angular:如何全局监听路由器事件

我想在导航发生时显示一个微调器。如何全局监听路由器事件,以便在路由发生时显示微调器NavigationStart并隐藏它NavigationEnd,就像我们如何HttpInterceptor处理全局拦截请求一样。

请给我一些建议。

0 投票
0 回答
595 浏览

angular2-services - 使用同名 DI 参数的多个服务提供商 (Angular 2)

在我的 Angular 2 项目中,我在一个组件中使用了 2 个不同的服务。它们都具有必需的 Injector 参数。我要解决的问题是两个 DI 参数使用相同的名称,但我不知道如何格式化我的组件提供程序以指定每个唯一服务的值。

例如:

Service1 构造函数@Inject('page') public page: string

Service2 构造函数@Inject('page') public page: string

在我的组件中,我将提供程序设置如下:

我想将唯一的“页面”值传递给每个服务,但两个服务最终都获得了 DI 参数的值“test2”。

如何以将正确的参数值传递给相关服务的方式编写组件提供程序?

0 投票
5 回答
32087 浏览

angular - Angular:使用服务延迟加载模块

我一直在关注教程,以了解延迟加载,以下是我的推论。

场景1:通过将服务放在providers子模块的数组中来提供服务

场景二:服务在子模块中使用该forRoot方法提供

在情景 1 中,

  • 如果一个子模块被急切地加载,一个服务的实例被添加到根注入器。
  • 如果子模块被延迟加载,则将服务的实例添加到根注入器中,并将服务的新实例添加到子注入器中,这不是通常的用例。

在情景 2 中,

  • 如果一个子模块被急切地加载,一个服务的实例被添加到根注入器。

  • 如果一个子模块被延迟加载,那么同一个服务实例在根模块和子模块中都可用,这是通常的用例。

他们提到了以下内容。

一开始,

因此,即使在使用模块时,也没有办法拥有“私有”服务,除非......模块被延迟加载。

最后,

虽然这个语法比原来的语法稍微复杂一些,但它可以保证我们只会将 CreditCardService 的一个实例添加到根模块中。当 CreditCardModule 被加载(甚至是延迟加载)时,不会将该服务的新实例添加到子注入器中。

如果该实例也将在根注入器中可用,他们如何说该服务已“私有化”?

我很困惑。有人请澄清。

0 投票
0 回答
70 浏览

javascript - 代码重构,无法获取数据

正如标题所说,我想重构我的代码。当我想将 API 调用放在外部提供程序中时遇到问题(如果有一天我必须使用它,我只会导入新的 .ts 文件),我无法访问“天气”数据。

这是我的代码:

这是我用于 API 的 Provider:

我将 loadposition() 函数剪切/粘贴到我创建的文件中,但我无法从中读取数据。有什么解决方案或者我只需要让函数在那里吗?

谢谢你的时间 !

0 投票
0 回答
83 浏览

angular - Angular 2 - 单例服务导致其他服务注入问题

我有很多代码,但我会尽量减少它。我正在尝试将服务转换为单例服务(TagService)。但这似乎引起了问题。我有很多组件和服务,但我会将其简化为 AddGroupComponent、TagComponent、TagService 和 ApiService。

为了创建一个单例 TagService,我将它添加到 app.module.ts:

这是我的 TagService,我没有在这里更改任何内容:

这些是我想将 TagService 用作共享单例的一些组件。

添加组组件

有了这个我得到错误:

AddGroupComponent_Host.ngfactory.js?[sm]:1 ERROR 错误:StaticInjectorError(MgrModule)[TagsComponent -> ApiService]: StaticInjectorError(Platform: core)[TagsComponent -> ApiService]: NullInjectorError: No provider for ApiService!

我知道它没有提供者。在我看来,所有的 TagComponents 都已经将 ApiService 用作单例(它只创建一次)。但我不确定发生了什么。

编辑:

我将 ApiService 添加到 ngModule 提供程序,并将其从其他提供程序中删除。现在一切正常,但是我将 console.logs 添加到了我的服务构造函数中,当我按下按钮创建 AddGroupComponent 时,仍然会创建一个新的 ApiService 和 TagService(但是,当我多次按下它时,它们不会再次创建)。所以现在它会创建它们两次(一次是在加载页面时,第二次是在单击打开 AddGroupComponent 的按钮时。

编辑2:

没关系,我有另一个名为 app.component.ts 的文件,它有一个通用的 MgrComponent,它也有这些服务作为提供者。似乎现在一切正常。

0 投票
2 回答
6223 浏览

angular - NullInjectorError:没有 t 的提供者

问候,我正在尝试使用“ng build --prod --configuration=production”构建我的 angular2 项目,将其部署在 ubuntu 服务器上,我在 Web 控制台中收到此错误:

我做了很多研究,似乎这是 AppModule 中被遗忘的提供者的错

但我找不到哪个服务...

项目树结构

如何找到解决方案,我不知道如何操作。

祝你有美好的一天,

0 投票
1 回答
49 浏览

angular - serviceFactory 作为提供者对象中的依赖项(deps:[]) - 有可能吗?

我在 app.module 中的提供者定义如下:

它工作正常。问题是,我需要 ServiceB 可以通过工厂功能进行配置,并且 serviceB 是可选的,但是这样的东西不起作用

我得到的错误:

是否有任何特殊语法或设计不可能?

0 投票
1 回答
32 浏览

angular - 为什么组件中的 ', providers: [TravelService] ' 会阻止 RXJS Behavior 主体跨组件共享数据?

上面的代码阻止了来自我的共享数据服务(使用来自 RXJS 的行为主题)的数据被正确共享。

但是,当我删除providers: [TravelService]DataSharing 服务时工作正常.. 我很想知道为什么?

提前致谢!

0 投票
1 回答
56 浏览

angular - Angular 8 延迟加载。有关以下问题的问题:导入、入口组件和提供程序

不久前我已经超过了 2MB 标记,所以我决定实施延迟加载来处理我的大量批次。因此,我对导入、entryComponents 和提供程序有疑问。将它们全部归结为一个问题:

我将什么导入 app-routing.module.ts 以及将什么导入 login-routing.module.ts

因为我使用:

  • 角模块
  • 角度材料模块(垫对话框,因此是入口组件)
  • 许多服务(所有组件中只有一些被调用)
  • 其他 npm

这是我的 app-routing.module.ts:


  这是我的登录-routing.module.ts:


0 投票
1 回答
34 浏览

angular - 通过提供的选项在服务中注册依赖项时无法解析组件的所有参数?

我一直在使用 Angular 中的 DI,但无法弄清楚为什么在指定要在模块中提供的服务时遇到错误providedIn

首先,我在SharedModule那里创建、声明SharedComponent并配置SharedService如下:

然后我添加了一个惰性模块,包含SharedModule在两者的装饰器工厂的imports属性中,并配置了我的路由策略。这是设置:NgModuleAppModuleLazyModule

结果,我收到以下错误:

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

但是,如果我评论providedIn: SharedModule并声明其中的提供者,SharedServiceSharedModule就像一个魅力:

请参阅StackBlitz演示。