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

Последние сборки из Angular2 жалуются: NgModule DynamicModule использует HomeComponent через "entryComponents",

Начиная с перехода на последние сборки Angular 2 (т.е. на github, master), я получаю следующие предупреждения обо всех моих компонентах:

NgModule DynamicModule использует HomeComponent через "entryComponents", но он не было объявлено и не было импортировано! Это предупреждение станет ошибкой после финала.

Я получаю то же сообщение об ошибке для всех моих компонентов, кроме HomeComponent.

Кто-нибудь может предоставить информацию о них?

4b9b3361

Ответ 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

для более полного ответа