TemplateRef没有提供程序!(NgIf→TemplateRef)

我试图显示一个复选标记,如果一个答案是接受的答案:

template: `<div ngIf="answer.accepted">&#10004;</div>`

但是我得到了这个错误:

EXCEPTION: No provider for TemplateRef! (NgIf ->TemplateRef)

我做错了什么?

169009 次浏览

你错过了NgIf前面的*(就像我们都有,几十次):

<div *ngIf="answer.accepted">&#10004;</div>

如果没有*, Angular会认为ngIf指令被应用到div元素上,但由于没有*<template>标记,它无法定位模板,因此会出现错误。


如果你在Angular v5中得到这个错误:

< p >错误:StaticInjectorError [TemplateRef]: < br > StaticInjectorError才能[TemplateRef]: < br > NullInjectorError: No provider for TemplateRef!< / p >

你可以在一个或多个组件模板中有<template>...</template>。将标记更改/更新为<ng-template>...</ng-template>

所以,我可以帮助你了解你犯了什么错误(以及在哪里),但在此之前,我们需要阅读文档:

访问一个TemplateRef实例 元素(或前缀为*的指令)。的TemplateRef 的构造函数中注入 指令,使用TemplateRef令牌

你也可以使用一个查询来找到一个TemplateRef与

所以:

  • 当使用[ngIf]="something"时,必须使用<ng-template>来访问模板ref(例如:当使用<template><ng-template>时);
  • 使用*ngIf,你可以在你想要的地方使用它,因为*保证了对模板ref的访问权限(例如:当使用<span><div>时);

如果你在代码中使用类似<span [ngIf]="message"> \{\{message}}</span>的东西,你可能会得到一些错误。

在编写代码时,有一个常见的错误就是在ngIf之前没有使用*,这使得angular编译器将ngIf作为模板引用变量,并检查在文件中找不到的变量的局部引用。因此,请检查这些错误并从中吸取教训

<div *ngIf="answer.accepted">&#10004;</div>