首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >没有TemplateRef的提供程序!(NgIf ->TemplateRef)

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

Stack Overflow用户
提问于 2016-03-11 12:12:57
回答 2查看 143.6K关注 0票数 312

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

代码语言:javascript
复制
template: `<div ngIf="answer.accepted">&#10004;</div>`

但是我得到了这个错误:

代码语言:javascript
复制
EXCEPTION: No provider for TemplateRef! (NgIf ->TemplateRef)

我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-11 12:12:57

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

代码语言:javascript
复制
<div *ngIf="answer.accepted">&#10004;</div>

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

如果使用Angular v5时出现以下错误:

错误: StaticInjectorErrorTemplateRef:

*StaticInjectorErrorTemplateRef:

*NullInjectorError:没有TemplateRef的提供程序!

您的一个或多个组件模板中可能包含<template>...</template>。将标记更改/更新为<ng-template>...</ng-template>

票数 772
EN

Stack Overflow用户

发布于 2021-03-18 13:45:46

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

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

您还可以使用查询来查找与组件或指令关联的TemplateRef。

所以:

  • 当使用[ngIf]="something"时,您必须使用<ng-template>来访问模板引用(例如:使用<template><div>);

时,您可以在您想要的地方使用它,因为*保证了对模板引用的访问(例如:使用<span>或时

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35932074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档