Angular2没有渲染器的提供者! (NgModel - > Token NgValueAccessor - > DefaultValueAccessor - > Renderer)

时间:2016-01-05 07:43:37

标签: angular angular2-template angular2-directives angular2-forms

我在shlomiassaf/angular2-modal中自定义了customModal.ts模式。 具体来说,我添加一个包含ngModel的输入,它导入了FORM_DIRECTIVES和指令。

运行时的问题'没有呈现器的提供者! (NgModel - > Token NgValueAccessor - > DefaultValueAccessor - > Renderer)'

请帮我解决这个问题。 感谢。

2 个答案:

答案 0 :(得分:1)

我看到两种可能性:

  • 未在组件或应用程序级别指定相应的提供程序。我没有想到这个问题,因为我已经注入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) {
        (...)
      }
    }
  • 我认为这是因为注入渲染器的类没有装饰,所以依赖注入不适用。正如本comment所强调的那样,你需要让它能够注入。 Injectable不是注入某些东西,而是注入其中。

修改

在查看代码后,您似乎需要将渲染器添加到您为loadNextToLocation方法提供的提供程序列表中。您可以像这样更新DialogService#open方法的代码:

var otherResolved = Injector.resolve([
  provide(DialogRef, { useValue: dialogRef})
  provide(Renderer, { useValue: this.renderer})
]);

希望它可以帮到你, 亨利

答案 1 :(得分:0)

您可能需要添加组件装饰器

@Component({
  providers: [Renderer],
  ...
)}