Подтвердить что ты не робот

CUSTOM_ELEMENTS_SCHEMA добавлено в NgModule.schemas, все еще показывающее ошибку

Я только что обновил от 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"): [email protected]: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, который импортирует 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 часов, обновляя эту версию...)

4b9b3361

Ответ 1

Эй это исправлено, делая

a) добавив schemas: [ CUSTOM_ELEMENTS_SCHEMA ] к каждому компоненту или

b) добавление

import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';

и

schemas: [
    CUSTOM_ELEMENTS_SCHEMA
],

к вашему модулю.

Приветствия, Рафаэль

Ответ 2

Просто хотел добавить немного больше.

В новом выпуске angular 2.0.0 (sept 14, 2016), если вы используете пользовательские теги html, тогда он сообщит об этом Template parse errors. Пользовательский тег - это тег, который вы используете в своем HTML, но не один из эти теги.

Похоже, что строка schemas: [ CUSTOM_ELEMENTS_SCHEMA ] должна быть добавлена ​​к каждому компоненту, где вы используете пользовательские теги HTML.

EDIT: Объявление schemas должно быть в декодере @NgModule. В приведенном ниже примере показан пользовательский модуль с настраиваемым компонентом CustomComponent, который позволяет использовать любой тег html в шаблоне html для этого одного компонента.

custom.module.ts

import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { CommonModule } from '@angular/common';

import { CustomComponent } from './custom.component';

@NgModule({
  declarations: [ CustomComponent ],
  exports: [ CustomComponent ],
  imports: [ CommonModule ],
  schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
})
export class CustomModule {}

custom.component.ts

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'my-custom-component',
  templateUrl: 'custom.component.html'
})
export class CustomComponent implements OnInit {
  constructor () {}
  ngOnInit () {}
}

custom.component.html

Здесь вы можете использовать любой HTML-тег, который вы хотите.

<div class="container">
  <boogey-man></boogey-man>
  <my-minion class="one-eyed">
    <job class="plumber"></job>
  </my-minion>
</div>

Ответ 3

Он работает для меня следующим образом:

в "App.module.ts":

1-

import CUSTOM_ELEMENTS_SCHEMA from `@angular/core` file ;

2 - Добавить

schemas: [
    CUSTOM_ELEMENTS_SCHEMA
]

в @NgModule({})

----------------------------------------------- ---------- >    < ------------------------------------------------ -------------

"app.module.ts" будет выглядеть так:

import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';

@NgModule({
  declarations: [],
  imports: [],
  schemas: [ CUSTOM_ELEMENTS_SCHEMA],
  providers: [],
  bootstrap: [AppComponent]
})

класс экспорта AppModule {}

Ответ 5

util.component.ts

@Component({
    selector: 'app-logout',
    template: `<button class="btn btn-primary"(click)="logout()">Logout</button>`
})
export class LogoutComponent{}

util.module.ts

@NgModule({
    imports: [...],
    exports: [
        LogoutComponent
    ],
    declarations: [LogoutComponent]
})
export class AccountModule{};

LogoutComponent Требуется экспортировать

dashboard.module.ts
   import AccountModule в модуле, где мы хотим использовать <app-logout>  import {AccountModule} из 'util.module';

@NgModule({
  imports: [
    CommonModule, AccountModule
  ],
  declarations: [DashboardComponent]
})
export class DashboardModule { }

dashboard.component.ts

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-dashboard',
  template: `<div><app-logout></app-logout></div>`
})
export class DashboardComponent implements OnInit {
  constructor() {}
  ngOnInit() {}
}

Мне не требуется импортировать и использовать CUSTOM_ELEMENTS_SCHEMA.
однако его не работает, когда dashboard.module ленив загружен.
При использовании CUSTOM_ELEMENTS_SCHEMA в случае ленивой загрузки ошибка подавляется, но компонент не добавляется в dom.

Ответ 6

Просто прочитайте этот пост и в соответствии с angular 2 документами:

export CUSTOM_ELEMENTS_SCHEMA
Defines a schema that will allow:

any non-Angular elements with a - in their name,
any properties on elements with a - in their name which is the common rule for custom elements.

Итак, на всякий случай, если кто-нибудь столкнется с этой проблемой, добавив CUSTOM_ELEMENTS_SCHEMA в свой NgModule, убедитесь, что любой новый пользовательский элемент, который вы используете, имеет "тире" в его имени, например. или т.д.

Ответ 7

Я хотел бы добавить еще одну дополнительную информацию, поскольку принятый ответ выше не полностью исправил мои ошибки.

В моем сценарии у меня есть родительский компонент, который содержит дочерний компонент. И этот дочерний компонент также содержит другой компонент.

Итак, в моем спецификационном файле родительского компонента должно быть объявление дочернего компонента, ТАК КАК ДЕТСКИЙ КОМПОНЕНТ РЕБЕНКА. Это окончательно устранило проблему для меня.

Ответ 8

Это не сработало для меня (с использованием 2.0.0). Что для меня работало, вместо этого импортировал RouterTestingModule.

Я решил это, импортировав RouterTestingModule в файл spec.

import {
    RouterTestingModule
} from '@angular/router/testing';

  beforeEach(() => {

        TestBed.configureTestingModule({
            providers: [
                App,
                AppState,
                Renderer,
                {provide: Router,  useClass: MockRouter }
            ],
            imports: [ RouterTestingModule ]
        });

    });

Ответ 9

Вы использовали веб-пакет... если да, пожалуйста, установите

angular2-template-loader

и поместите его

test: /\.ts$/,
   loaders: ['awesome-typescript-loader', 'angular2-template-loader']