#angular #contentful
#угловой #удовлетворительный
Вопрос:
Я пытаюсь использовать следующую библиотеку для преобразования содержимого форматированного текстового поля в HTML с помощью некоторых пользовательских средств визуализации.
https://github.com/kgajera/ngx-contentful-rich-text
По какой-то причине я получаю следующую ошибку, которая, как я предполагаю, каким-то образом связана с тем, как я импортирую модуль выше. Я полагаю, что я импортирую NgxContentfulRichTextModule правильно, поэтому я не уверен, почему шаблон CustomParagraphComponent не может его найти?
Ошибка
ОШИБКА в src / app/post/post.component.ts (шаблон CustomParagraphComponent): 2:28 — ошибка NG8001: ‘ngx-contentful-rich-text’ не является известным элементом:
- Если ‘ngx-contentful-rich-text’ является компонентом Angular, то убедитесь, что он является частью этого модуля.
- Если ‘ngx-contentful-rich-text’ является веб-компонентом, добавьте ‘CUSTOM_ELEMENTS_SCHEMA’ в ‘@NgModule.schemas’ этого компонента, чтобы подавить это сообщение.
App.Module.Ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {MaterialModule} from './material.module';
import {FlexLayoutModule} from '@angular/flex-layout';
import { HeaderComponent } from './navigation/header/header.component';
import { SidenavListComponent } from './navigation/sidenav-list/sidenav-list.component';
import { HomeComponent } from './home/home.component';
import { FooterComponent } from './navigation/footer/footer.component';
import { PostsComponent } from './posts/posts.component';
import { PostComponent } from './post/post.component';
import { PostCardComponent } from './post-card/post-card.component';
import { FeatureInfoComponent } from './feature-info/feature-info.component';
import { FeatureCardComponent } from './feature-card/feature-card.component';
import { PrivacyComponent } from './privacy/privacy.component';
import { AboutComponent } from './about/about.component';
import { ContributeComponent } from './contribute/contribute.component';
import { ContactComponent } from './contact/contact.component';
import { NgxContentfulRichTextModule } from 'ngx-contentful-rich-text';
@NgModule({
declarations: [
AppComponent,
HeaderComponent,
SidenavListComponent,
HomeComponent,
FooterComponent,
PostsComponent,
PostComponent,
PostCardComponent,
FeatureInfoComponent,
FeatureCardComponent,
PrivacyComponent,
AboutComponent,
ContributeComponent,
ContactComponent
],
imports: [
BrowserModule,
AppRoutingModule,
BrowserAnimationsModule,
MaterialModule,
FlexLayoutModule,
NgxContentfulRichTextModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Post.Component.Ts
import { switchMap } from 'rxjs/operators';
import { Component, OnInit, AfterViewInit, AfterViewChecked, Type } from '@angular/core';
import { ActivatedRoute, ParamMap } from '@angular/router';
import { Entry } from 'contentful';
import { ContentfulService } from '../contentful.service';
import { Observable } from 'rxjs';
import { BLOCKS, MARKS, Document } from '@contentful/rich-text-types';
import {
CHILDREN,
NodeRenderer
} from 'ngx-contentful-rich-text';
@Component({
template: `
<p class="text-center">${CHILDREN}</p>
`,
})
export class CustomParagraphComponent extends NodeRenderer {}
@Component({
selector: 'app-post',
templateUrl: './post.component.html',
styleUrls: ['./post.component.scss']
})
export class PostComponent implements OnInit, AfterViewChecked {
public postSlug;
post: Entry<any>;
document: Document;
// nodeRenderers: Record<string, Type<NodeRenderer>> = {
// [BLOCKS.PARAGRAPH]: CustomParagraphComponent,
// };
nodeRenderers: Record<string, Type<NodeRenderer>> = {
[BLOCKS.PARAGRAPH]: CustomParagraphComponent,
};
constructor(
public contentfulService: ContentfulService,
private route: ActivatedRoute) { }
ngOnInit(): void {
this.postSlug = this.route.snapshot.params['id'];
this.contentfulService.getPost(this.postSlug).then(post =>
{
this.post = post;
this.document = this.post.fields.body;
console.log(this.document);
});
}
ngAfterViewChecked(): void {
console.log('ngAfterViewChecked');
if(this.post != null ) {
console.log('NOT NULL');
this.contentfulService.returnHTMLfromRichText(this.post.fields.body);
}
}
}
Ответ №1:
CustomParagraphComponent
Не включен в библиотеку. Это показано только в readme как пример использования пользовательского компонента.
Однако вы можете исправить это, добавив CustomParagraphComponent
в declarations
массив AppModule
.