如果答案是接受的答案,我试图显示复选标记:
1:18:29
但是我收到了这个错误:
template: `<div ngIf="answer.accepted">✔</div>`
我做错了什么?
答案 0 :(得分:446)
你错过了NgIf面前的*
(就像我们所有人一样,几十次):
<div *ngIf="answer.accepted">✔</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>
之类的内容,您可能会遇到一些错误。