Estoy tratando de mostrar una marca de verificación si una respuesta es la respuesta aceptada:
template: `<div ngIf="answer.accepted">✔</div>`Pero me sale este error:
EXCEPTION: No provider for TemplateRef! (NgIf ->TemplateRef)¿Qué estoy haciendo mal?
Te perdiste el * delante de NgIf (como todos lo hemos hecho, docenas de veces):
<div *ngIf="answer.accepted">✔</div> Sin el * , Angular ve que la directiva ngIf se aplica al elemento div , pero dado que no hay una etiqueta * o <template> , no puede ubicar una plantilla, de ahí el error.
Si obtiene este error con Angular v5:
Error: StaticInjectorError[TemplateRef]:
StaticInjectorError[TemplateRef]:
NullInjectorError: ¡No hay proveedor para TemplateRef!
Puede tener <template>...</template> en una o más de sus plantillas de componentes. Cambie/actualice la etiqueta a <ng-template>...</ng-template> .
Entonces, puedo ayudar a comprender qué (y dónde) cometió el error, pero antes, debemos leer la documentación:
Acceda a una instancia de TemplateRef colocando una directiva en un elemento (o directiva con el prefijo *). El TemplateRef para la vista incrustada se inyecta en el constructor de la directiva, utilizando el token TemplateRef.
También puede usar una consulta para encontrar una TemplateRef asociada con un componente o una directiva.
Asi que:
[ngIf]="something" , debe usar <ng-template> para acceder a la referencia de la plantilla (por ejemplo, cuando usa <template> o <ng-template> );*ngIf puede usarlo donde quiera porque * garantiza el acceso a la referencia de la plantilla (por ejemplo, cuando usa <span> o <div> ); Si está usando en su código algo como <span [ngIf]="message"> {{message}}</span> probablemente obtendrá algún error.