问题标签 [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.
angular - Angular:如何全局监听路由器事件
我想在导航发生时显示一个微调器。如何全局监听路由器事件,以便在路由发生时显示微调器NavigationStart
并隐藏它NavigationEnd
,就像我们如何HttpInterceptor
处理全局拦截请求一样。
请给我一些建议。
angular2-services - 使用同名 DI 参数的多个服务提供商 (Angular 2)
在我的 Angular 2 项目中,我在一个组件中使用了 2 个不同的服务。它们都具有必需的 Injector 参数。我要解决的问题是两个 DI 参数使用相同的名称,但我不知道如何格式化我的组件提供程序以指定每个唯一服务的值。
例如:
Service1 构造函数:@Inject('page') public page: string
Service2 构造函数:@Inject('page') public page: string
在我的组件中,我将提供程序设置如下:
我想将唯一的“页面”值传递给每个服务,但两个服务最终都获得了 DI 参数的值“test2”。
如何以将正确的参数值传递给相关服务的方式编写组件提供程序?
angular - Angular:使用服务延迟加载模块
我一直在关注本教程,以了解延迟加载,以下是我的推论。
场景1:通过将服务放在providers
子模块的数组中来提供服务
场景二:服务在子模块中使用该forRoot
方法提供
在情景 1 中,
- 如果一个子模块被急切地加载,一个服务的实例被添加到根注入器。
- 如果子模块被延迟加载,则将服务的实例添加到根注入器中,并将服务的新实例添加到子注入器中,这不是通常的用例。
在情景 2 中,
如果一个子模块被急切地加载,一个服务的实例被添加到根注入器。
如果一个子模块被延迟加载,那么同一个服务实例在根模块和子模块中都可用,这是通常的用例。
他们提到了以下内容。
一开始,
因此,即使在使用模块时,也没有办法拥有“私有”服务,除非......模块被延迟加载。
最后,
虽然这个语法比原来的语法稍微复杂一些,但它可以保证我们只会将 CreditCardService 的一个实例添加到根模块中。当 CreditCardModule 被加载(甚至是延迟加载)时,不会将该服务的新实例添加到子注入器中。
如果该实例也将在根注入器中可用,他们如何说该服务已“私有化”?
我很困惑。有人请澄清。
javascript - 代码重构,无法获取数据
正如标题所说,我想重构我的代码。当我想将 API 调用放在外部提供程序中时遇到问题(如果有一天我必须使用它,我只会导入新的 .ts 文件),我无法访问“天气”数据。
这是我的代码:
这是我用于 API 的 Provider:
我将 loadposition() 函数剪切/粘贴到我创建的文件中,但我无法从中读取数据。有什么解决方案或者我只需要让函数在那里吗?
谢谢你的时间 !
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,它也有这些服务作为提供者。似乎现在一切正常。
angular - NullInjectorError:没有 t 的提供者
问候,我正在尝试使用“ng build --prod --configuration=production”构建我的 angular2 项目,将其部署在 ubuntu 服务器上,我在 Web 控制台中收到此错误:
我做了很多研究,似乎这是 AppModule 中被遗忘的提供者的错
但我找不到哪个服务...
如何找到解决方案,我不知道如何操作。
祝你有美好的一天,
angular - serviceFactory 作为提供者对象中的依赖项(deps:[]) - 有可能吗?
我在 app.module 中的提供者定义如下:
它工作正常。问题是,我需要 ServiceB 可以通过工厂功能进行配置,并且 serviceB 是可选的,但是这样的东西不起作用:
我得到的错误:
是否有任何特殊语法或设计不可能?
angular - 为什么组件中的 ', providers: [TravelService] ' 会阻止 RXJS Behavior 主体跨组件共享数据?
上面的代码阻止了来自我的共享数据服务(使用来自 RXJS 的行为主题)的数据被正确共享。
但是,当我删除providers: [TravelService]
DataSharing 服务时工作正常.. 我很想知道为什么?
提前致谢!
angular - Angular 8 延迟加载。有关以下问题的问题:导入、入口组件和提供程序
不久前我已经超过了 2MB 标记,所以我决定实施延迟加载来处理我的大量批次。因此,我对导入、entryComponents 和提供程序有疑问。将它们全部归结为一个问题:
我将什么导入 app-routing.module.ts 以及将什么导入 login-routing.module.ts
因为我使用:
- 角模块
- 角度材料模块(垫对话框,因此是入口组件)
- 许多服务(所有组件中只有一些被调用)
- 其他 npm
这是我的 app-routing.module.ts:
这是我的登录-routing.module.ts:
angular - 通过提供的选项在服务中注册依赖项时无法解析组件的所有参数?
我一直在使用 Angular 中的 DI,但无法弄清楚为什么在指定要在模块中提供的服务时遇到错误providedIn
。
首先,我在SharedModule
那里创建、声明SharedComponent
并配置SharedService
如下:
然后我添加了一个惰性模块,包含SharedModule
在两者的装饰器工厂的imports
属性中,并配置了我的路由策略。这是设置:NgModule
AppModule
LazyModule
结果,我收到以下错误:
未捕获的错误:无法解析 SharedComponent 的所有参数:(?)。
但是,如果我评论providedIn: SharedModule
并声明其中的提供者,SharedService
它SharedModule
就像一个魅力:
请参阅StackBlitz演示。