2017-07-31 1 views
4

En utilisant ag-grid avec angular4, je suis coincé avec le message d'erreur ci-dessous. J'essaie d'afficher les données de ligne après avoir récupéré json via HTTP.Aucune usine de composants trouvée. L'avez-vous ajouté à @ NgModule.entryComponents?

this.gridOptions.api.setRowData(this.gridOptions.rowData); 

Mais mon code fait en dessous du message d'erreur.

ERROR Error: No component factory found for RedComponentComponent. Did you add it to @NgModule.entryComponents?

Ceci est mon code de module d'application. Je l'ai déjà mis à entryComponents.

import { BrowserModule } from '@angular/platform-browser'; 
import { NgModule } from '@angular/core'; 
import { FormsModule } from '@angular/forms'; 
import { HttpModule } from '@angular/http'; 
import { AgGridModule} from "ag-grid-angular/main"; 

import { AppComponent } from './app.component'; 
import { MyGridApplicationComponent } from './my-grid-application/my-grid-application.component'; 
import { RedComponentComponent } from './red-component/red-component.component'; 

@NgModule({ 
    imports: [ 
    BrowserModule, 
    AgGridModule.withComponents(
     [RedComponentComponent] 
    ), 
    FormsModule, 
    HttpModule 
    ], 
    declarations: [ 
    AppComponent, 
    MyGridApplicationComponent, 
    RedComponentComponent 
    ], 
    entryComponents: [ 
    RedComponentComponent 
    ], 
    providers: [], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { } 

error position of my code

Ma question. Pourquoi ce code ne peut pas résoudre ce composant.

+0

Essayez de redémarrer le serveur. – Ploppy

+0

Pouvez-vous fournir un repro exécutable? – yurzui

+0

@Ploppy a redémarré le serveur. mais se produisent toujours. – sungyong

Répondre

6

Vous passez string à ComponentFactoryResolver lors du chargement de données à partir du serveur, mais il doit s'agir d'un type de composant.

header.json

{ 
    "headerName": "DetailCode", 
    "field": "detailCode", 
    "cellRendererFramework": "RedComponentComponent", // string 
    "width":100 
}, 

pour le résoudre, je voudrais créer des composants d'entrée carte comme:

entrée-components.ts

import { RedComponentComponent } from './red-component/red-component.component'; 

export const entryComponentsMap = { 
    'RedComponentComponent': RedComponentComponent 
}; 

puis chargement de la carte de chaîne json à la classe de composant

comm code-grille-option.service.ts

private fetchColumnDefs() { 
console.log("fetchColumnDefs()"); 

this.http.get(this.API_URI + "resident/header.json").subscribe(
    r => { 
    this.gridOptions.columnDefs = r.json(); 
    this.gridOptions.columnDefs.forEach((x: any) => { 
     if (x.cellRendererFramework) { 
     x.cellRendererFramework = entryComponentsMap[x.cellRendererFramework]; 
     } 
    });