I'm working on an Angular 6 application and I need to create a toggle table with PrimeNG 7.0.5, but I've got this problem when I tried to use <p-table>:
'p-table' is not a known element
Same problem when I want to use parameters as 'value' in < p-table >.
I am using the Documentation of the TurboTable here.
I have imported the TableModule in my app.module.ts.
app.module.ts
import { CommonModule, registerLocaleData } from '@angular/common'; import { HttpClient, HttpClientModule } from '@angular/common/http'; import { HttpModule } from '@angular/http'; import { NgModule, Pipe, PipeTransform, LOCALE_ID } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { TranslateHttpLoader } from '@ngx-translate/http-loader'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { AuthGuard } from './shared'; import { FormsModule } from '@angular/forms'; import { MessageComponent } from './message/message.component'; import { MessageService } from './message/message.service'; // imported it here import { TableModule } from 'primeng/table'; import localeFr from '@angular/common/locales/fr'; registerLocaleData(localeFr); export const createTranslateLoader = (http: HttpClient) => { return new TranslateHttpLoader(http, './assets/i18n/', '.json'); }; @NgModule({ imports: [ CommonModule, BrowserModule, BrowserAnimationsModule, HttpClientModule, FormsModule, HttpModule, TableModule, /* <-- added this */ TranslateModule.forRoot({ loader: { provide: TranslateLoader, useFactory: createTranslateLoader, deps: [HttpClient] } }), AppRoutingModule ], declarations: [AppComponent, MessageComponent], providers: [AuthGuard, MessageService, { provide: LOCALE_ID, useValue: 'fr-FR' }], bootstrap: [AppComponent] }) export class AppModule { } For the html, I've just tested the code with this:
<p-table></p-table> I found nothing about this case on the net and on this version... Has somebody has ever had this problem?
33 Answers
import { TableModule } in the module in which component you are using it
2First, please make sure you are generating angular and installing primeNG of the compatible version. I also got the same problem before I update my node.js. My node version is now. V12.16.2 and when I install primeNG I got a compatible version. So in part of my package.json is as follows:
"@angular/common": "9.0.4", "@angular/compiler": "9.0.4", "@angular/core": "9.0.4", And the primeNG installed is of the following version:
"primeicons": "^2.0.0", "primeng": "^9.0.5", Then, importing the module should be in the nearest module to the html file.
import { TableModule } from 'primeng/table'; Hope it help.
Even after adding the CUSTOM_ELEMENTS_SCHEMA to my module and ensuring version compatibility, I was not able to get rid of the error. I looked further at the error message:
Error: src/app/ - error NG8001: 'p-table' is not a known element: 1. If 'p-table' is an Angular component, then verify that it is part of this module. 2. If 'p-table' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message. And was able to figure the cause: MyComponent was using the PrimeNG table, and that it was not declared in the App Module. So all I had to do was add the MyComponent in declarations array for the module:
@NgModule({ declarations: [ AppComponent, MyComponent ], imports: [ BrowserModule, FormsModule, TableModule ], schemas: [CUSTOM_ELEMENTS_SCHEMA], bootstrap: [AppComponent] }) export class AppModule { }