Acabei de atualizar do Angular 2 rc4 para rc6 e com problemas para fazê-lo.
Eu vejo o seguinte erro no meu console:
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
Aqui está o meu componente de cabeçalho:
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... }
Aqui está o meu Módulo de cabeçalho:
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 { }
Eu criei um módulo wrapper chamado módulo util que importa o HeaderModule:
import { NgModule } from '@angular/core';
import {HeaderModule} from "./header/header.module";
// ...
@NgModule({
declarations: [ ],
bootstrap: [ ],
imports: [ HeaderModule]
})
export class UtilModule { }
Finalmente importado pelo 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 { }
Para meu entendimento, estou seguindo as instruções da mensagem de erro usando o ESQUEMA para suprimir o erro. Mas parece não funcionar. O que estou fazendo de errado? (Espero que não seja nada óbvio, apenas não vejo no momento. Passei as últimas 6 horas atualizando para esta versão ...)
angular
karma-jasmine
Raphael Hippe
fonte
fonte
AppModule
, ainda precisará adicioná-lo ao seu componente?Respostas:
Só queria adicionar um pouco mais sobre isso.
Com a nova versão final angular 2.0.0 (14 de setembro de 2016), se você usar tags html personalizadas, ele informará isso
Template parse errors
. Uma tag personalizada é uma tag usada em seu HTML que não é uma dessas tags .Parece que a linha
schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
precisa ser adicionada a cada componente em que você está usando tags HTML personalizadas.EDIT: A
schemas
declaração precisa estar em um@NgModule
decorador. O exemplo abaixo mostra um módulo personalizado com um componente personalizadoCustomComponent
que permite qualquer tag html no modelo html para esse componente.custom.module.ts
custom.component.ts
custom.component.html
Aqui você pode usar qualquer tag HTML que desejar.
fonte
CUSTOM_ELEMENTS_SCHEMA
módulo falso no meu teste de unidade. Assim que eu fiz isso, ele parou de reclamar.CUSTOM_ELEMENTS_SCHEMA
pode levar a erros difíceis de encontrar, mas eu gostaria de usar nomes de elementos personalizados parang-content
seções em meus controles sem que esses nomes de elementos específicos causem erros e sem criar componentes para eles que seriam apenas conteúdo de conteúdo ...schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
precisa ser adicionada a cada componente em que você está usando tags HTML ? Parece que oComponent
decorador não está aceitando umschemas
parâmetro.Component
decorador, é encontrado noNgModule
decorador. Você precisará criar um módulo para esse componente e, em seguida, poderá especificar o esquema lá. Link para documentos e um exemplo.Isso é corrigido por:
a) adicionando
schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
a cada componente oub) adicionando
e
para o seu módulo.
fonte
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
Isso também pode surgir ao executar testes de unidade, se você estiver testando um componente com elementos personalizados. Nesse caso, custom_elements_schema precisa ser incluído no testingModule que é configurado no início do arquivo .spec.ts para esse componente. Aqui está um exemplo de como a instalação do header.component.spec.ts começaria:
fonte
Adicione o seguinte
@NgModule({})
em 'app.module.ts':e depois
Seu 'app.module.ts' deve ficar assim:
fonte
Também não funcionou para mim. eu mudei
para
sugerida neste artigo: https://scotch.io/tutorials/angular-2-transclusion-using-ng-content
Agora funciona.
fonte
CUSTOM_ELEMENTS_SCHEMA
não ajuda, masNO_ERRORS_SCHEMA
fez o truque e todo o assentamento de elementos angulares autônomos agora funciona como um encantoTestBed
. O elemento estava funcionando bem, mas o teste estava falhando. Adicionadoschemas: [NO_ERRORS_SCHEMA]
, e está tudo bem.util.component.ts
util.module.ts
LogoutComponent precisa ser exportado
dashboard.module.ts
import
AccountModule
no módulo onde queremos usar<app-logout>
import {AccountModule} de 'util.module';dashboard.component.ts
Não sou obrigado a importar e usar
CUSTOM_ELEMENTS_SCHEMA
.no entanto, não está funcionando quando o dashboard.module está carregado preguiçosamente.
Ao usar
CUSTOM_ELEMENTS_SCHEMA
em caso de carregamento lento, o erro é suprimido, mas o componente não é adicionado ao dom.fonte
Com componentes contendo material angular, ocorreu um erro semelhante nos meus testes de unidade. Conforme a resposta de @Dan Stirling-Talbert acima, adicionei isso ao meu arquivo .spec componente e o erro foi eliminado dos meus testes de unidade.
Em seguida, adicione o esquema na instrução beforeEach () gerada:
Meu erro no Karma foi: Se 'mat-panel-title' for um componente da Web, adicione 'CUSTOM_ELEMENTS_SCHEMA' ao '@ NgModule.schemas' deste componente para suprimir esta mensagem.
fonte
Basta ler este post e de acordo com os 2 documentos angulares:
Portanto, caso alguém encontre esse problema, depois de adicionar CUSTOM_ELEMENTS_SCHEMA ao seu NgModule, verifique se qualquer novo elemento personalizado usado possui um 'traço' em seu nome, por exemplo. ou etc.
fonte
Este post é bastante longo e fornece uma explicação mais detalhada do problema.
O problema (no meu caso) surge quando você tem projeção de conteúdo com vários slots
Veja também projeção de conteúdo para mais informações.
Por exemplo, se você tem um componente que se parece com isso:
arquivo html:
arquivo ts:
E você deseja usá-lo como:
E então você obtém erros de análise de modelo que não é um componente Angular conhecido e, na verdade, não é - é apenas uma referência a um conteúdo ng em seu componente:
E a solução mais simples é adicionar
... para seu app.module.ts
Mas existe uma abordagem fácil e limpa para esse problema - em vez de usar
<my-component-header>
para inserir html no slot - você pode usar um nome de classe para esta tarefa como esta:arquivo html:
E você deseja usá-lo como:
Então ... não há mais componentes que não existem, portanto não há problemas, erros, necessidade de CUSTOM_ELEMENTS_SCHEMA no app.module.ts
Portanto, se você era como eu e não queria adicionar CUSTOM_ELEMENTS_SCHEMA ao módulo - usar seu componente dessa maneira não gera erros e é mais claro.
Para mais informações sobre este problema - https://github.com/angular/angular/issues/11251
Para obter mais informações sobre projeção de conteúdo angular - https://blog.angular-university.io/angular-ng-content/
Você também pode ver https://scotch.io/tutorials/angular-2-transclusion-using-ng-content
fonte
Gostaria de adicionar mais uma informação, pois a resposta aceita acima não corrigiu completamente meus erros.
No meu cenário, eu tenho um componente pai, que contém um componente filho. E esse componente filho também contém outro componente.
Portanto, o arquivo de especificação do meu componente pai precisa ter a declaração do componente filho, assim como o componente da criança. Isso finalmente resolveu o problema para mim.
fonte
Eu acho que você está usando um módulo personalizado. Você pode tentar o seguinte. Você precisa adicionar o seguinte ao arquivo your-module.module.ts :
fonte
Isso não funcionou para mim (usando o 2.0.0). O que funcionou para mim foi importar o RouterTestingModule.
Eu resolvi isso importando RouterTestingModule no arquivo de especificações.
fonte
Para mim, eu precisava olhar para:
1. If 'cl-header' is an Angular component, then verify that it is part of this module.
Isso significa que seu componente não está incluído no
app.module.ts
. Verifique se ele foi importado e incluído nadeclarations
seção.fonte
Acabei de importar
ClarityModule
e resolveu todos os problemas. De uma chance!Além disso, inclua o módulo nas importações.
imports: [ ClarityModule ],
fonte
CUSTOM_ELEMENTS_SCHEMA
, em angular.io/api/core/CUSTOM_ELEMENTS_SCHEMA , descobriremos que CUSTOM_ELEMENTS_SCHEMA permite que o NgModule contenha elementos não angulares com maiúsculas e minúsculas (-) {semelhante a este cenário}. O Módulo Clarity, quando importado, inclui todos os ícones clr, etc. por padrão, e também podemos usar outras funcionalidades do módulo Clarity.clr-header
. O mesmo erro ocorre paraclr-icon
outros. Como mencionei no meu comentário anterior, o módulo Clarity contém esses por padrão. Espero que tenha respondido sua pergunta.resolveu esse problema no arquivo /app/app.module.ts
importe seu componente e declare-o
fonte
Você usou o webpack ... se sim, instale
e coloca
fonte