Saya baru saja memutakhirkan dari Angular 2 rc4 ke rc6 dan mengalami kesulitan melakukannya.
Saya melihat kesalahan berikut di konsol saya:
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
Berikut adalah Komponen Header saya:
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... }
Inilah Modul Header saya:
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 { }
Saya membuat modul pembungkus yang disebut modul util yang mengimpor HeaderModule:
import { NgModule } from '@angular/core';
import {HeaderModule} from "./header/header.module";
// ...
@NgModule({
declarations: [ ],
bootstrap: [ ],
imports: [ HeaderModule]
})
export class UtilModule { }
Yang akhirnya diimpor oleh 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 { }
Untuk pemahaman saya, saya mengikuti instruksi pesan kesalahan menggunakan SCHEMA untuk mengatasi kesalahan. Tapi sepertinya tidak berhasil. Apa yang saya lakukan salah? (Saya harap tidak ada yang jelas saya tidak melihat saat ini. Telah menghabiskan 6 jam terakhir untuk meningkatkan versi ini ...)
angular
karma-jasmine
Raphael Hippe
sumber
sumber
AppModule
apakah Anda masih harus menambahkannya ke komponen Anda?Jawaban:
Hanya ingin menambahkan sedikit lebih banyak tentang ini.
Dengan rilis akhir 2.0.0 bersudut baru (14 September 2016), jika Anda menggunakan tag html khusus maka akan melaporkannya
Template parse errors
. Tag khusus adalah tag yang Anda gunakan dalam HTML Anda yang bukan salah satu dari tag ini .Sepertinya baris
schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
perlu ditambahkan ke setiap komponen tempat Anda menggunakan tag HTML khusus.EDIT: The
schemas
deklarasi perlu di@NgModule
dekorator. Contoh di bawah ini menunjukkan modul khusus dengan komponen khususCustomComponent
yang memungkinkan tag html apa pun di templat html untuk satu komponen itu.custom.module.ts
custom.component.ts
custom.component.html
Di sini Anda dapat menggunakan tag HTML apa pun yang Anda inginkan.
sumber
CUSTOM_ELEMENTS_SCHEMA
ke modul test unit palsu saya. Begitu saya melakukan itu, ia berhenti mengeluh.CUSTOM_ELEMENTS_SCHEMA
dapat menyebabkan kesalahan yang sulit ditemukan, tetapi saya ingin menggunakan nama elemen khusus untukng-content
bagian di kontrol saya tanpa nama elemen spesifik yang menyebabkan kesalahan dan tanpa membuat komponen untuk mereka yang hanya akan ng-konten ...schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
perlu ditambahkan ke setiap komponen tempat Anda menggunakan tag HTML ? SepertinyaComponent
dekorator tidak menerimaschemas
parameter.Component
dekorator, itu ditemukan diNgModule
dekorator. Anda harus membuat modul untuk komponen itu dan kemudian Anda dapat menentukan skema di sana. Tautan ke dokumen dan contoh.Ini diperbaiki oleh:
a) menambahkan
schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
ke setiap komponen ataub) menambahkan
dan
ke modul Anda.
sumber
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
Ini juga dapat muncul saat menjalankan pengujian unit jika Anda menguji komponen dengan elemen khusus. Dalam hal itu custom_elements_schema perlu ditambahkan ke testingModule yang mendapatkan pengaturan di awal file .spec.ts untuk komponen itu. Berikut adalah contoh bagaimana pengaturan header.component.spec.ts akan dimulai:
sumber
Tambahkan yang berikut
@NgModule({})
di bawah 'app.module.ts':lalu
'App.module.ts' Anda akan terlihat seperti ini:
sumber
Itu juga tidak berhasil untuk saya. aku berubah
untuk
yang disarankan dalam artikel ini: https://scotch.io/tutorials/angular-2-transclusion-using-ng-content
Sekarang berhasil.
sumber
CUSTOM_ELEMENTS_SCHEMA
tidak membantu tetapiNO_ERRORS_SCHEMA
melakukan trik dan semua bersarang elemen sudut mandiri sekarang berfungsi seperti pesonaTestBed
. Elemen bekerja dengan baik tetapi tes gagal. Ditambahkanschemas: [NO_ERRORS_SCHEMA]
, dan semuanya baik-baik saja.util.component.ts
util.module.ts
LogoutComponent Perlu diekspor
impor
AccountModule
<app-logout>
dashboard.module.ts dalam modul tempat kami ingin menggunakan impor {AccountModule} dari 'util.module';dashboard.component.ts
Saya tidak perlu mengimpor dan menggunakan
CUSTOM_ELEMENTS_SCHEMA
.namun tidak berfungsi saat dashboard.module dimuat dengan malas.
Saat menggunakan
CUSTOM_ELEMENTS_SCHEMA
dalam kasus pemuatan malas, kesalahan ditekan tetapi komponen tidak ditambahkan ke dom.sumber
Dengan komponen yang mengandung Bahan Angular, kesalahan yang sama muncul dengan tes unit saya. Sesuai jawaban @Dan Stirling-Talbert di atas, menambahkan ini ke file komponen .spec saya dan kesalahan dihapus dari pengujian unit saya.
Kemudian tambahkan skema dalam pernyataan beforeEach () yang dihasilkan:
Kesalahan Karma saya adalah: Jika 'mat-panel-title' adalah Komponen Web kemudian tambahkan 'CUSTOM_ELEMENTS_SCHEMA' ke '@ NgModule.schemas' dari komponen ini untuk menekan pesan ini.
sumber
Baca saja pos ini dan sesuai dengan sudut 2 dokumen:
Jadi kalau-kalau ada yang mengalami masalah ini, setelah Anda menambahkan CUSTOM_ELEMENTS_SCHEMA ke NgModule Anda, pastikan bahwa elemen kustom baru apa pun yang Anda gunakan memiliki 'tanda hubung' dalam namanya, misalnya. atau dll.
sumber
Ini posting yang agak panjang dan memberikan penjelasan yang lebih rinci tentang masalah ini.
Masalahnya (dalam kasus saya) muncul ketika Anda memiliki Proyeksi Konten Multi Slot
Lihat juga proyeksi konten untuk info lebih lanjut.
Misalnya Jika Anda memiliki komponen yang terlihat seperti ini:
file html:
file ts:
Dan Anda ingin menggunakannya seperti:
Dan kemudian Anda mendapatkan kesalahan parse templat yang bukan komponen Angular yang diketahui dan faktanya tidak - itu hanya referensi ke konten ng di komponen Anda:
Dan kemudian perbaikan paling sederhana adalah menambahkan
... ke app.module.ts Anda
Tetapi ada pendekatan yang mudah dan bersih untuk masalah ini - alih-alih menggunakan
<my-component-header>
untuk memasukkan html di slot di sana - Anda dapat menggunakan nama kelas untuk tugas ini seperti ini:file html:
Dan Anda ingin menggunakannya seperti:
Jadi ... tidak ada lagi komponen yang tidak ada sehingga tidak ada masalah di dalamnya, tidak ada kesalahan, tidak perlu untuk CUSTOM_ELEMENTS_SCHEMA di app.module.ts
Jadi Jika Anda seperti saya dan tidak ingin menambahkan CUSTOM_ELEMENTS_SCHEMA ke modul - menggunakan komponen Anda dengan cara ini tidak menghasilkan kesalahan dan lebih jelas.
Untuk info lebih lanjut tentang masalah ini - https://github.com/angular/angular/issues/11251
Untuk info lebih lanjut tentang proyeksi konten sudut - https://blog.angular-university.io/angular-ng-content/
Anda juga dapat melihat https://scotch.io/tutorials/angular-2-transclusion-using-ng-content
sumber
Saya ingin menambahkan satu informasi tambahan karena jawaban yang diterima di atas tidak memperbaiki kesalahan saya sepenuhnya.
Dalam skenario saya, saya memiliki komponen induk, yang menampung komponen anak. Dan komponen anak itu juga mengandung komponen lain.
Jadi, file spesifikasi komponen orang tua saya harus memiliki deklarasi komponen anak, SERTA KOMPONEN ANAK. Itu akhirnya memperbaiki masalah bagi saya.
sumber
Saya pikir Anda menggunakan modul khusus. Anda dapat mencoba yang berikut ini. Anda perlu menambahkan yang berikut ke file your-module.module.ts :
sumber
Itu tidak berhasil untuk saya (menggunakan 2.0.0). Yang berhasil bagi saya adalah mengimpor RouterTestingModule sebagai gantinya.
Saya menyelesaikan ini dengan mengimpor RouterTestingModule dalam file spesifikasi.
sumber
Bagi saya, saya perlu melihat:
1. If 'cl-header' is an Angular component, then verify that it is part of this module.
Ini berarti bahwa komponen Anda tidak termasuk dalam
app.module.ts
. Pastikan itu diimpor dan kemudian dimasukkan dideclarations
bagian ini.sumber
Saya baru saja mengimpor
ClarityModule
dan menyelesaikan semua masalah. Cobalah!Juga, sertakan modul dalam impor.
imports: [ ClarityModule ],
sumber
CUSTOM_ELEMENTS_SCHEMA
, di angular.io/api/core/CUSTOM_ELEMENTS_SCHEMA kami akan menemukan bahwa CUSTOM_ELEMENTS_SCHEMA memungkinkan NgModule untuk memuat elemen non-Angular dengan case dash (-) {mirip dengan skenario ini}. Clarity Module ketika diimpor menyertakan semua clr-icons, dll secara default dan kami juga dapat menggunakan fungsionalitas modul kejelasan lainnya.clr-header
. Kesalahan yang sama juga terjadi padaclr-icon
orang lain. Seperti yang saya sebutkan di komentar saya sebelumnya, modul Clarity berisi ini secara default. Saya harap ini menjawab pertanyaan Anda.memecahkan masalah ini di file /app/app.module.ts
impor komponen Anda dan nyatakan
sumber
Apakah Anda menggunakan paket web ... jika ya, silakan instal
dan taruh itu
sumber