【问题标题】:Angular2 No provider for Renderer! (NgModel -> Token NgValueAccessor -> DefaultValueAccessor -> Renderer)Angular2 没有渲染器的提供者! (NgModel -> Token NgValueAccessor -> DefaultValueAccessor -> Renderer)
【发布时间】:2016-04-08 23:22:11
【问题描述】:

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

运行“No provider for Renderer”时的问题! (NgModel -> Token NgValueAccessor -> DefaultValueAccessor -> Renderer)'

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

【问题讨论】:

  • 能否显示项目的控制台日志 (plnkr.co/edit/o09cpitFihjZE2EpHNRE?p=preview) 并解决错误?
  • 您需要将渲染器添加到您提供给loadNextToLocationDialogService 方法的提供程序列表中。有关更多详细信息,请参阅我的答案;-)

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


【解决方案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})
]);

希望对你有帮助 蒂埃里

【讨论】:

  • 太棒了!非常感谢!
【解决方案2】:

你可能需要在你的组件中添加装饰器

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 2017-01-31
  • 2016-12-18
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
相关资源
最近更新 更多