Последние сборки из Angular2 жалуются: NgModule DynamicModule использует HomeComponent через "entryComponents",
Начиная с перехода на последние сборки Angular 2 (т.е. на github, master), я получаю следующие предупреждения обо всех моих компонентах:
NgModule DynamicModule использует HomeComponent через "entryComponents", но он не было объявлено и не было импортировано! Это предупреждение станет ошибкой после финала.
Я получаю то же сообщение об ошибке для всех моих компонентов, кроме HomeComponent
.
Кто-нибудь может предоставить информацию о них?
Ответы
Ответ 1
Это тоже меня поймало. Значительные изменения в RC5 в том, как вы маршрутизируете и загружаете с большой опорой на декодер app.module.ts
и @NgModule
. Документация была обновлена здесь: https://angular.io/docs/ts/latest/ и журнал изменений: https://github.com/angular/angular/blob/master/CHANGELOG.md
Основные изменения в файле маршрутизации - это изменения в операторах import
и export
. Ниже проиллюстрирован простой пример, который имеет два компонента: AppComponent
и HomeComponent
, который служит HomeComponent
из index.html
:
Файл: app.routing.ts
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './home.component';
const appRoutes: Routes = [
{
path: '',
redirectTo: '/home',
pathMatch: 'full'
},
{
path: 'home',
component: HomeComponent
}
];
export const routing = RouterModule.forRoot(appRoutes);`
Затем вам нужно использовать файл NgModule:
Файл: app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { HomeComponent } from './home.component';
import { routing } from './app.routing';
@NgModule({
imports: [ BrowserModule, routing ],
declarations: [ AppComponent, HomeComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
И тогда вам нужно втягивать AppModule
в main.ts
и загружать его, используя его.
Файл: main.ts
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';
platformBrowserDynamic().bootstrapModule(AppModule);`
Этот шаблон не выводит предупреждающее сообщение консоли.
Ответ 2
Есть еще одна вещь, которая должна быть осторожна в отношении этого предупреждения.
Я получал его, хотя я фактически декламировал компонент в своем модуле, и это подталкивало меня к стене, потому что все выглядело правильно.
Итак, я перешел через compiler.umd.js, где возникло предупреждение, и я заметил, что компонент, для которого я получал ошибку, был добавлен в массив директив дважды здесь:
if (force || !transitiveModule.directivesSet.has(dirMeta.type.runtime)) {
transitiveModule.directivesSet.add(dirMeta.type.runtime);
transitiveModule.directives.push(dirMeta);
declaredDirectives.push(dirMeta);
this._addTypeToModule(dirMeta.type.runtime, moduleType);
return true;
}
В принципе, хотя компонент уже был в директивеSet, transitiveModule.directivesSet.has(dirMeta.type.runtime) оценивал значение false, поэтому он снова добавлялся, и один из них вызывал предупреждение.
Оказалось, что операторы импорта в моем файле маршрутизации и мой файл модуля немного отличались. Один заглавил первую букву каталога в пути, в то время как в другом каталоге было все в нижнем регистре:
//in routing
import { SomeComponent } from './Directory/some.component';
//in app module
import { SomeComponent } from './directory/some.component';
Как только я изменился, чтобы пути совпали, предупреждение исчезло. Все остальное, казалось, функционировало должным образом с несоответствующим корпусом.
Ответ 3
вам также нужно добавить каждый компонент в свои маршруты к объявлениям NgModule. Много шаблонов. См. Здесь angular https://github.com/angular/angular/issues/10472
Ответ 4
У меня такая же проблема, но на тестовой части.
WARN: "Компонент RootCmp в NgModule DynamicTestModule использует BlankCmp через" entryComponents", но он не был объявлен и не импортирован модуль! Это предупреждение станет ошибкой после финала.
Как настроить DynamicTestModule?
Ответ 5
Если вы обновляете большую базу кода, ни один из этих ответов не сообщает вам, какой компонент вы забыли добавить в app.module.ts
Самый близкий ответ (если это ваша проблема) задается с помощью @doubletriplezero
Он упоминает, что compiler.umd.js имеет некоторую полезную информацию.
Фактически это может точно указать, какой компонент вы забыли импортировать. См
Angular 2 Компонент не является частью любого NgModule
для более полного ответа