Angular2没有TemplateRef的提供程序! (NgIf - > TemplateRef)

时间:2016-03-11 04:12:57

标签: angular angular2-template

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

1:18:29

但是我收到了这个错误:

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

我做错了什么?

2 个答案:

答案 0 :(得分:446)

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

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

如果没有*,Angular会看到ngIf指令正在应用于div元素,但由于没有*<template>标记,它无法找到模板,因此错误。

如果Angular v5出现此错误:

  

错误:StaticInjectorError [TemplateRef]:
    StaticInjectorError [TemplateRef]:
    NullInjectorError:没有TemplateRef的提供者!

您可能在一个或多个组件模板中拥有<template>...</template>。将代码更改/更新为<ng-template>...</ng-template>

答案 1 :(得分:5)

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

<块引用>

通过在一个模板上放置一个指令来访问一个 TemplateRef 实例 元素(或以 * 为前缀的指令)。模板引用 因为嵌入的视图被注入到构造函数中 指令,使用 TemplateRef 标记。

您还可以使用 Query 来查找与 组件或指令。

所以:

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

如果您在代码中使用 <span [ngIf]="message"> {{message}}</span> 之类的内容,您可能会遇到一些错误。