问题标签 [angular2-di]
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 - 管道中没有服务提供商
我有一个自定义管道和一个指令,我想在它们之间共享一些数据。我创建了一个服务,应该处理这个。我收到以下错误:
错误:没有 MyService 的提供者
这是代码:
该指令应提供以下服务:
当在同一个组件上使用时,管道也应该获得服务:
例如,这用于这样的输入:
在我阅读了关于 DI 的 angular2 文档并搜索了这个主题之后,我找不到任何我做错的事情。据我所知,这应该有效。任何想法为什么不?
ps:使用 angular 2.x 和 Ionic2
angular - 无法从父结构指令访问子结构指令
我正在尝试从父指令访问子结构指令。
这就是我试图访问孩子的方式
我不确定为什么子指令不可访问。
我创建了一个 plunkr 来演示这个问题。
https://plnkr.co/edit/deQC6cY4oHuNdKbzsfhE?p=preview
请让我知道为什么这不起作用。
PS:我已经使用了 ViewChild 和 ContentChild (最有可能的候选者),因为我不确定这会属于哪一个,因为它们是动态生成的元素。
angular - 无法获得角度 2 的喷油器
我有DrawingDataService
包含我的数据数组和绘制这些数据的不同工具。我想DrawingDataService
在我的所有工具中都使用单例。
我DrawingDataService
在 AppModule 提供者列表中设置(使其成为单例实例):
然后我在我的工具中添加注射器:
它说我this.injector
是空的。制作单例服务来存储数据是一种好习惯吗?
angular - 实现之间的依赖注入切换
我有一个在两种不同模式下工作的应用程序:演示和正常。演示模式仅在用户没有帐户并且只想尝试应用程序以查看其工作原理时使用。
现在假设我们有一个在应用程序中使用的服务。例如检索Account
和验证用户的服务:
对于这个服务,我们有两种实现,每种模式一个。AccountServiceImpl
,对于普通模式,向某个服务器执行 HTTP 请求以检索帐户。而AccountServiceDemoImpl
只是返回一个硬编码的。
假设我们有一个AccountComponent
向用户显示帐户名称的组件。对于这个组件,我们使用哪个实现并不重要,所以我们只需AccountService
在它的构造函数中注入一个。
一切都很好,我们可以轻松地使用任一实现来填写 AccountComponent。现在,当用户单击登录页面上的按钮时,我们希望能够在运行时在这些实现之间切换。所以我写了一个工厂提供者来确定使用哪个 AccountService 实现
可以想象,AccountService
在登录页面上也注入了 来处理用户的认证。这意味着该工厂已经过评估。现在,问题是这个评估的结果被缓存在 Angular 中。因此,当激活演示模式并且用户导航到 时AccountComponent
,实际AccountServiceImpl
将再次注入。
有没有办法清除 DI 缓存(对于一组特定的 DI 令牌)?还是我应该尝试以其他方式处理此功能?(例如,编写AccountService
委托给AccountServiceImpl
或 的另一个实现AccountServiceDemoImpl
。)
angular - 尝试扩展 FormControlDirective 以实现我自己的 FormControl 指令会导致绑定错误
我正在尝试反转表单控件将自己注册到 a 上的方式FormGroup
,这样就不必
或者
我可以
并让我的指令FormControl
为我创建并添加。
最好用这个Plunker来解释。
似乎不起作用的是将视图绑定到表单模型,如您所见,更改输入不会更改表单模型值。
调试它表明没有valueAccessor
注入构造函数(与直接使用基FormControlDirective
类时不同)。
如果您想知道,我的最终目标是我将拥有一个父自定义组组件,该组件将@ViewChildren(MyFormDirective)
动态地将它们全部添加到它创建的表单中。
angular - 有没有办法在Angular4中链接@Injectable()
我正在构建一个 Ionic 3 应用程序(使用 Angular 4)。我创建了一个 LocationProvider,它允许我从实际的页面逻辑中提取位置服务,以便它可以重用。
我的 LocationProvider 使用 @ionic-native/geolocation(地理位置提供者)。
当我通过 将我的 LocationProvider 注入页面时@NgModule({ providers: [LocationProvider] })
,我收到一条错误消息,提示找不到地理位置提供程序。每当使用 LocationProvider 时,是否有任何方法可以包含 Geolocation 提供程序?还是我需要一直拥有providers:[LocationProvider, Geolocation]
?
我猜这不是 Ionic 特定的(而是 Angular 4),有什么方法需要在 中列出这两个提供者NgModule
吗?
angular - 如何动态注入助手类
我有一个使用两个辅助类之一的组件,例如:
我意识到这很难进行单元测试,那么我该如何注入这些呢?理想情况下,我只需要其中一个,取决于isMobile
是真是假。
angular - 自定义管道实例在哪里?组件代码如何访问其 HTML 中使用的自定义管道实例?
我有一个在组件的 HTML 部分中使用的自定义管道。它在模块中声明:
我希望能够从组件代码(而不是transform
方法)中调用它的方法。
我希望管道实例存在于依赖注入上下文中的某个位置,以便我可以抓住它。但是我错了。如果我将它注入到组件的构造函数中(例如任何普通服务):
然后我得到一个错误:没有提供者。所以我将它包含在providers
同一模块的部分中:
然后我将可以在组件代码中访问它,但我的自定义管道会有两个实例。
创建者
providers
,在 DI 上下文中可用。在构造函数中注入时我会得到这个实例,所以我将在我的组件代码中使用这个实例。HTML 中使用的实例。它在哪里生活?我想在我的组件代码中访问这个实例,而不是“提供”的那个;我怎样才能获得它?
angular - 仅在非 AOT 模式下无法将参数解析为服务 (?)
我见过很多 AoT 编译由于某种原因而失败或产生奇怪的运行时错误的情况。我有相反的问题:我的应用程序在非 AoT 模式下失败并出现错误:
无法解析 ConfirmRemoveService (?) 的所有参数
无论我的目标是开发还是生产,无论我使用的是环境dev
还是prod
环境,都会发生这种情况。例如,只要我还明确打开 AoT,纯开发构建就会成功:
上面的?
错误消息中MatDialog
的 Angular Material2 库中的 type 。(这ConfirmRemoveService
是组件用来建立模态对话框的服务。)
此问题可能与升级到该库的 beta 11 版本有关,也可能无关。它可能与我从一个MaterialModule
直接从库中直接导入的更改(因为MaterialModule
现在已被删除)更改为我自己的模块,该模块导入单个 Angular Material2 模块,例如MatDialogModule
;然后我在必要时导入该模块。但是,这些都不会阻止应用程序在 AoT 模式下运行。它只是在非 AoT 模式下才会出现错误。
有谁知道这种问题只能在非 AoT 场景中发生的场景,为什么?
angular - 在 Angular 2.X 自定义模块中获取对注入器的引用?
我们如何在应用程序模块中获得对依赖注入器的引用?
这是自定义模块的示例代码。那么我们如何在这个类中获得对 Angular DI(依赖注入器)的引用呢?