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})
]);

希望对你有帮助, 蒂埃里