Acabo de actualizar de Angular 2 rc4 a rc6 y tengo problemas para hacerlo.
Veo el siguiente error en mi consola:
Unhandled Promise rejection: Template parse errors:
'cl-header' is not a known element:
1. If 'cl-header' is an Angular component, then verify that it is part of this module.
2. If 'cl-header' is a Web Component then add "CUSTOM_ELEMENTS_SCHEMA" to the '@NgModule.schema' of this component to suppress this message. ("<main>
[ERROR ->]<cl-header>Loading Header...</cl-header>
<div class="container-fluid">
<cl-feedbackcontai"): AppComponent@1:4
Aquí está mi componente de encabezado:
import { Component } from '@angular/core';
import { Router } from '@angular/router';
// own service
import { AuthenticationService } from '../../../services/authentication/authentication.service.ts';
import '../../../../../public/css/styles.css';
@Component({
selector: 'cl-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.css']
})
export class HeaderComponent { // more code here... }
Aquí está mi módulo de encabezado:
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { RouterModule } from '@angular/router';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { HeaderComponent } from './../../../components/util_components/header/header.component.ts';
@NgModule({
declarations: [ HeaderComponent ],
bootstrap: [ HeaderComponent ],
imports: [ RouterModule, CommonModule, FormsModule ],
schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
})
export class HeaderModule { }
Creé un módulo contenedor llamado módulo util que importa el HeaderModule:
import { NgModule } from '@angular/core';
import {HeaderModule} from "./header/header.module";
// ...
@NgModule({
declarations: [ ],
bootstrap: [ ],
imports: [ HeaderModule]
})
export class UtilModule { }
El cual finalmente es importado por el AppModule:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import {UtilModule} from "./modules/util_modules/util.module";
import {RoutingModule} from "./modules/routing_modules/routing.module";
@NgModule({
bootstrap: [AppComponent],
declarations: [AppComponent],
imports: [BrowserModule, UtilModule, RoutingModule]
})
export class AppModule { }
Según tengo entendido, estoy siguiendo las instrucciones del mensaje de error usando SCHEMA para eliminar el error. Pero parece que no funciona. ¿Qué estoy haciendo mal? (Espero que no sea nada obvio que no veo en este momento. He pasado las últimas 6 horas actualizando a esta versión ...)
angular
karma-jasmine
Raphael Hippe
fuente
fuente
AppModule
todavía tiene que agregarlo a su componente?Respuestas:
Solo quería agregar un poco más sobre esto.
Con la nueva versión final angular 2.0.0 (14 de septiembre de 2016), si usa etiquetas html personalizadas, lo informará
Template parse errors
. Una etiqueta personalizada es una etiqueta que usa en su HTML que no es una de estas etiquetas .Parece que la línea
schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
debe agregarse a cada componente donde está utilizando etiquetas HTML personalizadas.EDITAR: La
schemas
declaración debe estar en un@NgModule
decorador. El siguiente ejemplo muestra un módulo personalizado con un componente personalizadoCustomComponent
que permite cualquier etiqueta html en la plantilla html para ese componente.custom.module.ts
custom.component.ts
custom.component.html
Aquí puede usar cualquier etiqueta HTML que desee.
fuente
CUSTOM_ELEMENTS_SCHEMA
módulo falso de prueba de mi unidad. Tan pronto como hice eso, dejó de quejarse.CUSTOM_ELEMENTS_SCHEMA
podría dar lugar a errores que son difíciles de encontrar, pero me gustaría usar nombres de elementos personalizados para lasng-content
secciones en mis controles sin que esos nombres de elementos específicos causen errores y sin crear componentes para ellos que solo serían ng-content ...schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
debe agregarse a cada componente donde está utilizando etiquetas HTML ? Parece que elComponent
decorador no acepta unschemas
parámetro.Component
decorador, se encuentra en elNgModule
decorador. Deberá crear un módulo para ese componente y luego puede especificar el esquema allí. Enlace a documentos y un ejemplo.Esto se soluciona mediante:
a) agregando
schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
a cada componente ob) agregando
y
a su módulo
fuente
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
Esto también puede aparecer al ejecutar pruebas unitarias si está probando un componente con elementos personalizados. En ese caso, custom_elements_schema debe agregarse al testingModule que se configura al comienzo del archivo .spec.ts para ese componente. Aquí hay un ejemplo de cómo comenzaría la configuración header.component.spec.ts:
fuente
Agregue lo siguiente
@NgModule({})
en 'app.module.ts':y entonces
Su 'app.module.ts' debería verse así:
fuente
A mí tampoco me funcionó. Cambié
para
que se sugirió en este artículo: https://scotch.io/tutorials/angular-2-transclusion-using-ng-content
Ahora funciona.
fuente
CUSTOM_ELEMENTS_SCHEMA
no ayudó peroNO_ERRORS_SCHEMA
hizo el truco y toda la anidación de elementos angulares independientes ahora funciona como un encantoTestBed
. El elemento funcionaba bien pero la prueba estaba fallando. Agregadoschemas: [NO_ERRORS_SCHEMA]
, y todo está bien.util.component.ts
util.module.ts
LogoutComponent necesita ser exportado
dashboard.module.ts
import
AccountModule
en el módulo donde queremos usar<app-logout>
import {AccountModule} de 'util.module';dashboard.component.ts
No estoy obligado a importar y usar
CUSTOM_ELEMENTS_SCHEMA
.sin embargo, no funciona cuando dashboard.module tiene una carga lenta.
Cuando se usa
CUSTOM_ELEMENTS_SCHEMA
en caso de carga diferida, el error se suprime pero el componente no se agrega a dom.fuente
Con los componentes que contienen material angular, se produjo un error similar con las pruebas de mi unidad. Según la respuesta anterior de @Dan Stirling-Talbert, agregué esto a mi archivo .spec de componente y el error se borró de mis pruebas unitarias.
Luego agregue el esquema en la declaración generada beforeEach ():
Mi error de Karma fue: si 'mat-panel-title' es un Componente Web, agregue 'CUSTOM_ELEMENTS_SCHEMA' a '@ NgModule.schemas' de este componente para suprimir este mensaje.
fuente
Solo lea esta publicación y de acuerdo con los documentos angulares 2:
Entonces, en caso de que alguien se encuentre con este problema, una vez que haya agregado CUSTOM_ELEMENTS_SCHEMA a su NgModule, asegúrese de que cualquier elemento personalizado nuevo que use tenga un 'guión' en su nombre, por ejemplo. o etc.
fuente
Esta es una publicación bastante larga y ofrece una explicación más detallada del problema.
El problema (en mi caso) surge cuando tienes Proyección de contenido de múltiples ranuras
Vea también la proyección de contenido para más información.
Por ejemplo, si tiene un componente que se ve así:
archivo html:
archivo ts:
Y quieres usarlo como:
Y luego obtiene errores de análisis de plantilla que no es un componente angular conocido y, de hecho, no lo es; es solo una referencia a un contenido ng en su componente:
Y luego la solución más simple es agregar
... a tu app.module.ts
Pero hay un enfoque fácil y limpio para este problema: en lugar de usar
<my-component-header>
para insertar html en la ranura, puede usar un nombre de clase para esta tarea de esta manera:archivo html:
Y quieres usarlo como:
Entonces ... no más componentes que no existen, por lo que no hay problemas en eso, no hay errores, no es necesario para CUSTOM_ELEMENTS_SCHEMA en app.module.ts
Entonces, si fueras como yo y no quisieras agregar CUSTOM_ELEMENTS_SCHEMA al módulo, usar tu componente de esta manera no genera errores y es más claro.
Para obtener más información sobre este problema: https://github.com/angular/angular/issues/11251
Para obtener más información sobre la proyección de contenido angular: https://blog.angular-university.io/angular-ng-content/
También puede ver https://scotch.io/tutorials/angular-2-transclusion-using-ng-content
fuente
Me gustaría agregar una información adicional ya que la respuesta aceptada arriba no solucionó mis errores por completo.
En mi escenario, tengo un componente primario, que contiene un componente secundario. Y ese componente hijo también contiene otro componente.
Por lo tanto, el archivo de especificaciones del componente principal debe tener la declaración del componente secundario, ASÍ COMO EL COMPONENTE DEL NIÑO DEL NIÑO. Eso finalmente solucionó el problema para mí.
fuente
Creo que estás usando un módulo personalizado. Puedes probar lo siguiente. Debe agregar lo siguiente al archivo your-module.module.ts :
fuente
Eso no funcionó para mí (usando 2.0.0). Lo que funcionó para mí fue importar RouterTestingModule en su lugar.
Resolví esto importando RouterTestingModule en el archivo de especificaciones.
fuente
Para mí, necesitaba mirar:
1. If 'cl-header' is an Angular component, then verify that it is part of this module.
Esto significa que su componente no está incluido en el
app.module.ts
. Asegúrese de que se importe y luego se incluya en ladeclarations
sección.fuente
Acabo de importar
ClarityModule
y resolvió todos los problemas. ¡Darle una oportunidad!Además, incluya el módulo en las importaciones.
imports: [ ClarityModule ],
fuente
CUSTOM_ELEMENTS_SCHEMA
, en angular.io/api/core/CUSTOM_ELEMENTS_SCHEMA , encontraremos que CUSTOM_ELEMENTS_SCHEMA permite que NgModule contenga elementos no angulares con un guión (-) {similar a este escenario}. Clarity Module cuando se importa incluye todos los iconos clr, etc. de forma predeterminada y también podemos usar otras funcionalidades del módulo de claridad.clr-header
. Se produce el mismo errorclr-icon
y otros. Como mencioné en mi comentario anterior, el módulo Clarity contiene estos por defecto. Espero que haya respondido tu pregunta.resolvió este problema en el archivo /app/app.module.ts
importa tu componente y declaralo
fuente
¿Usó el paquete web? Si es así, instale
y ponlo
fuente