更新:
@Injectable()
class MyService {
private renderer: Renderer2;
constructor(rendererFactory: RendererFactory2) {
this.renderer = rendererFactory.createRenderer(null, null);
}
}
在此处查看更多信息:
https://github.com/angular/angular/issues/17824#issuecomment-351961146
以前的版本:
根据您的进口情况
import { Injectable, Renderer2 } from '@angular/core'
我怀疑您正试图在您的服务类中注入 Renderer2。它行不通。您不能在服务中注入Renderer2。它应该适用于组件内提供的组件和服务。
我们可以看一下源码https://github.com/angular/angular/blob/4.0.1/packages/core/src/view/provider.ts#L363-L373
while (view) {
if (elDef) {
switch (tokenKey) {
case RendererV1TokenKey: {
const compView = findCompView(view, elDef, allowPrivateServices);
return createRendererV1(compView);
}
case Renderer2TokenKey: {
const compView = findCompView(view, elDef, allowPrivateServices);
return compView.renderer;
}
它只在元素注入器树中检查。而且没有其他地方可以提供这个token
所以当你调用一些服务方法https://github.com/angular/angular/issues/17824#issuecomment-311986129时,你必须将Renderer2从组件传递到服务。
或者你可以在组件内提供服务
@Injectable()
export class Service {
constructor(private r: Renderer2) {}
}
@Component({
selector: 'my-app',
templateUrl: `./app.component.html`,
providers: [Service]
})
export class AppComponent {
constructor(private service: Service) {}
}