Angular2 没有提供渲染器! (NgModel -> 令牌 NgValueAccessor -> DefaultValueAccessor -> 渲染器)
Angular2 No provider for Renderer! (NgModel -> Token NgValueAccessor -> DefaultValueAccessor -> Renderer)
我在 shlomiassaf/angular2-modal 中自定义了 customModal.ts 的模态框。
具体来说,我添加了一个包含 ngModel 的输入,它导入了 FORM_DIRECTIVES 和指令。
运行'No provider for Renderer! (NgModel -> Token NgValueAccessor -> DefaultValueAccessor -> Renderer)'
时的问题
请帮我解决这个问题。
谢谢
您可能需要添加组件装饰器
@Component({
providers: [Renderer],
...
)}
我看到两种可能性:
相应的提供程序未在组件或应用程序级别指定。我认为这不是问题,因为我已经注入了 Renderer
而没有在其 providers
属性或 bootstrap
函数的第二个参数中指定它。
类似的东西:
import {Component,Renderer,ElementRef} from 'angular2/core';
@Component({
selector: 'child',
template: '<div></div>',
})
export class ChildComponent {
constructor(private _renderer: Renderer,
private el: ElementRef) {
(...)
}
}
- 我认为这是因为注入渲染器的 class 没有被修饰,所以依赖注入不能应用。正如此 comment 中强调的那样,您需要拥有它才能进行注入。
Injectable
不是为了注入某物而是为了注入自身。
编辑
查看您的代码后,您似乎需要将渲染器添加到提供给 loadNextToLocation
方法的提供程序列表中。您可以像这样更新 DialogService#open
方法的代码:
var otherResolved = Injector.resolve([
provide(DialogRef, { useValue: dialogRef})
provide(Renderer, { useValue: this.renderer})
]);
希望对你有帮助,
蒂埃里
我在 shlomiassaf/angular2-modal 中自定义了 customModal.ts 的模态框。 具体来说,我添加了一个包含 ngModel 的输入,它导入了 FORM_DIRECTIVES 和指令。
运行'No provider for Renderer! (NgModel -> Token NgValueAccessor -> DefaultValueAccessor -> Renderer)'
时的问题请帮我解决这个问题。 谢谢
您可能需要添加组件装饰器
@Component({
providers: [Renderer],
...
)}
我看到两种可能性:
相应的提供程序未在组件或应用程序级别指定。我认为这不是问题,因为我已经注入了
Renderer
而没有在其providers
属性或bootstrap
函数的第二个参数中指定它。类似的东西:
import {Component,Renderer,ElementRef} from 'angular2/core';
@Component({
selector: 'child',
template: '<div></div>',
})
export class ChildComponent {
constructor(private _renderer: Renderer,
private el: ElementRef) {
(...)
}
}
- 我认为这是因为注入渲染器的 class 没有被修饰,所以依赖注入不能应用。正如此 comment 中强调的那样,您需要拥有它才能进行注入。
Injectable
不是为了注入某物而是为了注入自身。
编辑
查看您的代码后,您似乎需要将渲染器添加到提供给 loadNextToLocation
方法的提供程序列表中。您可以像这样更新 DialogService#open
方法的代码:
var otherResolved = Injector.resolve([
provide(DialogRef, { useValue: dialogRef})
provide(Renderer, { useValue: this.renderer})
]);
希望对你有帮助, 蒂埃里