Я только что перешел с Angular 2 RC4 на RC6 и у меня возникли проблемы с этим.
Я вижу следующую ошибку на моей консоли:
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
Вот мой компонент заголовка:
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... }
Вот мой модуль заголовка:
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 { }
Я создал модуль-обертку с именем util module, который импортирует HeaderModule:
import { NgModule } from '@angular/core';
import {HeaderModule} from "./header/header.module";
// ...
@NgModule({
declarations: [ ],
bootstrap: [ ],
imports: [ HeaderModule]
})
export class UtilModule { }
Который наконец импортируется 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 { }
Насколько я понимаю, я следую инструкциям сообщения об ошибке, используя SCHEMA для устранения ошибки. Но, похоже, не работает. Что я делаю не так? (Надеюсь, ничего очевидного в данный момент я не вижу. Последние 6 часов я потратил на обновление до этой версии ...)
angular
karma-jasmine
Рафаэль Хиппе
источник
источник
AppModule
, вам все равно придется добавить его в свой компонент?Ответы:
Просто хотел добавить немного больше об этом.
В новом выпуске angular 2.0.0 (14 сентября 2016 г.), если вы используете пользовательские теги html, он сообщит об этом
Template parse errors
. Пользовательский тег - это тег, который вы используете в своем HTML, но он не является одним из этих тегов .Похоже, что строка
schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
должна быть добавлена к каждому компоненту, где вы используете пользовательские теги HTML.EDIT:
schemas
декларация должна быть в@NgModule
декоратора. В приведенном ниже примере показан пользовательский модуль с пользовательским компонентом,CustomComponent
который допускает использование любого html-тега в html-шаблоне для этого одного компонента.custom.module.ts
custom.component.ts
custom.component.html
Здесь вы можете использовать любой HTML-тег, который вы хотите.
источник
CUSTOM_ELEMENTS_SCHEMA
модуль поддельного теста в мой модуль. Как только я это сделал, он перестал жаловаться.CUSTOM_ELEMENTS_SCHEMA
может привести к ошибкам, которые трудно найти, но я хотел бы использовать настраиваемые имена элементов дляng-content
разделов в моих элементах управления без конкретных имен элементов, вызывающих ошибки, и без создания для них компонентов, которые были бы просто ng-content ...schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
необходимо добавить в каждый компонент, где вы используете HTML-теги ? Похоже,Component
декоратор не принимаетschemas
параметр.Component
декоратора, он найден вNgModule
декораторе. Вам нужно создать модуль для этого компонента, а затем вы можете указать схему там. Ссылка на документы и пример.Это исправлено:
а) добавление
schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
к каждому компоненту илиб) добавление
и
к вашему модулю.
источник
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
Это также может возникнуть при запуске модульных тестов, если вы тестируете компонент с пользовательскими элементами. В этом случае custom_elements_schema необходимо добавить в модуль testingModule, который запускается в начале файла .spec.ts для этого компонента. Вот пример начала установки header.component.spec.ts:
источник
Добавьте следующее
@NgModule({})
в "app.module.ts":а потом
Ваш app.module.ts должен выглядеть так:
источник
У меня это тоже не сработало. Я изменился
для
который был предложен в этой статье: https://scotch.io/tutorials/angular-2-transclusion-using-ng-content
Теперь это работает.
источник
CUSTOM_ELEMENTS_SCHEMA
не помогло, ноNO_ERRORS_SCHEMA
сделало трюк, и все вложение автономных угловых элементов теперь работает как обаяниеTestBed
. Элемент работал нормально, но тест не удался. Добавилschemas: [NO_ERRORS_SCHEMA]
, и все хорошо.util.component.ts
util.module.ts
LogoutComponent Нужно экспортировать
импорт
AccountModule
<app-logout>
dashboard.module.ts в модуле, где мы хотим использовать import {AccountModule} из 'util.module';dashboard.component.ts
Я не обязан импортировать и использовать
CUSTOM_ELEMENTS_SCHEMA
.однако, это не работает, когда dashboard.module загружен лениво.
При использовании
CUSTOM_ELEMENTS_SCHEMA
в случае отложенной загрузки ошибка подавляется, но компонент не добавляется в dom.источник
С компонентами, содержащими Angular Material, похожая ошибка возникла при моих модульных тестах. В соответствии с ответом @Dan Stirling-Talbert выше, я добавил это в мой файл .spec компонента, и ошибка была очищена из моих модульных тестов.
Затем добавьте схему в сгенерированный оператор beforeEach ():
Моя ошибка кармы: если 'mat-panel-title' является веб-компонентом, то добавьте 'CUSTOM_ELEMENTS_SCHEMA' к '@ NgModule.schemas' этого компонента, чтобы подавить это сообщение.
источник
Просто прочитайте этот пост и согласно угловым 2 документам:
Так что на всякий случай, если кто-то столкнется с этой проблемой, после того, как вы добавили CUSTOM_ELEMENTS_SCHEMA в свой NgModule, убедитесь, что у любого нового пользовательского элемента, который вы используете, есть «тире» в его имени, например. или т. д.
источник
Это довольно длинный пост, и он дает более подробное объяснение проблемы.
Проблема (в моем случае) возникает, когда у вас есть мультислот-проекция контента
Смотрите также контент проекции для получения дополнительной информации.
Например, если у вас есть компонент, который выглядит следующим образом:
HTML-файл:
TS файл:
И вы хотите использовать это как:
И затем вы получаете ошибки синтаксического анализа шаблона, которые не являются известным Angular-компонентом, и на самом деле это не так - это просто ссылка на ng-контент в вашем компоненте:
И тогда самое простое исправление - это добавление
... в ваш app.module.ts
Но есть простой и понятный подход к этой проблеме - вместо использования
<my-component-header>
для вставки html в слот - вы можете использовать имя класса для этой задачи, например:HTML-файл:
И вы хотите использовать это как:
Итак ... больше нет компонентов, которые не существуют, поэтому в этом нет проблем, нет ошибок, нет необходимости в CUSTOM_ELEMENTS_SCHEMA в app.module.ts
Так что если вы были похожи на меня и не хотели добавлять CUSTOM_ELEMENTS_SCHEMA в модуль - использование вашего компонента таким способом не приводит к ошибкам и является более понятным.
Для получения дополнительной информации об этой проблеме - https://github.com/angular/angular/issues/11251
Для получения дополнительной информации о проекции углового контента - https://blog.angular-university.io/angular-ng-content/
Вы также можете увидеть https://scotch.io/tutorials/angular-2-transclusion-using-ng-content
источник
Я хотел бы добавить еще одну информацию, поскольку принятый ответ не полностью исправил мои ошибки.
В моем сценарии у меня есть родительский компонент, который содержит дочерний компонент. И этот дочерний компонент также содержит другой компонент.
Итак, файл спецификации моего родительского компонента должен иметь объявление дочернего компонента, КАК ХОРОШО, КАК КОМПОНЕНТ РЕБЕНКА CHILD. Это наконец решило проблему для меня.
источник
Я думаю, что вы используете пользовательский модуль. Вы можете попробовать следующее. Вам необходимо добавить следующее в файл your-module.module.ts :
источник
Это не сработало для меня (используя 2.0.0). То, что работало для меня, было импортировать RouterTestingModule вместо этого.
Я решил это, импортировав RouterTestingModule в spec-файл.
источник
Для меня мне нужно было посмотреть на:
1. If 'cl-header' is an Angular component, then verify that it is part of this module.
Это означает, что ваш компонент не включен в
app.module.ts
. Убедитесь, что он импортирован, а затем включен вdeclarations
раздел.источник
Я просто импортировал,
ClarityModule
и это решило все проблемы. Попробуйте!Также включите модуль в импорт.
imports: [ ClarityModule ],
источник
CUSTOM_ELEMENTS_SCHEMA
адресу angular.io/api/core/CUSTOM_ELEMENTS_SCHEMA, то обнаружим, что CUSTOM_ELEMENTS_SCHEMA позволяет NgModule содержать неугловые элементы с тире (-) {аналогично этому сценарию}. Модуль Clarity при импорте включает в себя все значки clr и т. Д. По умолчанию, и мы также можем использовать другие функции модуля понятности.clr-header
. Та же ошибка возникает и дляclr-icon
других. Как я уже упоминал в предыдущем комментарии, модуль Clarity по умолчанию содержит их. Я надеюсь, что он ответил на ваш вопрос.решил эту проблему в файле /app/app.module.ts
импортировать ваш компонент и объявить его
источник
Вы использовали веб-пакет ... если да, пожалуйста, установите
и положи
источник