Welcome to 16892 Developer Community-Open, Learning,Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I'm use the latest version of 'ngx-editor' in my Angular App, but when I use inline style in the div of content, it's not showing correctly. I mean, ngx-editor remove that style in the wysiwyg editor.

I've been try with this example below.

app.component.ts

// my typescript
const content = `
  <div style="background: orange; display: flex; width: 100%; height: 64px">
    Example text with example custom container with inline style
  </div>
  <div style="background: #000000; width: 100%; height: 30px; text-align: center">
    Example footer
  </div>
`
this.formGroup = this.formBuilder.group({
  content: [toDoc(content)],
});

app.component.html

<div class="row">
  <div class="col-12">
    <form [formGroup]="formGroup">
      <ngx-editor formControlName="content"></ngx-editor>
      <button class="btn btn-primary btn-sm" (click)="doSubmit()">Submit</button>
    </form>
  </div>
</div>

But when I click the submit button and console that result, I don't get that inline style.

Maybe, someone now how to use inline style on the content of ngx-editor. Thanks for your help.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
837 views
Welcome To Ask or Share your Answers For Others

1 Answer

I hope you are using v5 or v6 and above. You will need to create custom schema for that.

const paragraph: NodeSpec = {
  content: 'inline*',
  group: 'block',
  attrs: {
    align: {
      default: null,
    },
    background: {
      default: null
    }
  },
  parseDOM: [
    {
      tag: 'p',
      getAttrs(dom: HTMLElement): Record<string, any> {
        const { textAlign } = dom.style;
        const align = dom.getAttribute('align') || textAlign || null;

        return {
          align
        };
      }
    },
    {
      tag: 'div', // this will parse div to the editor required format
      getAttrs(dom: HTMLElement): Record<string, any> {
        const { textAlign, background } = dom.style; // you can add required properties here.
        const align = dom.getAttribute('align') || textAlign || null;

        return {
          align,
          background
        };
      }
    }
  ],
  toDOM(node): DOMOutputSpec {
    const { align,background } = node.attrs;

    const styles: Partial<CSSStyleDeclaration> = {
      textAlign: align !== 'left' ? align : null,
      background
    };
    const style = toStyleString(styles) || null;

    return ['p', { style }, 0];
  }
};

You can add/handle additional styles properties as required. Refer here https://github.com/sibiraj-s/ngx-editor/blob/v5.3.0/src/lib/schema/nodes.ts for more details.

Schema

import { nodes as basicNodes, marks } from 'ngx-editor';

const nodes = Object.assign({}, basicNodes, {
  paragraph,
});

const schema = new Schema({
  nodes,
  marks,
});

For v6,while initialising an editor

export class AppComponent implements OnInit, OnDestroy {
  editor: Editor;
  ngOnInit(): void {
    this.editor = new Editor({
      schema,
    });
  }

  ngOnDestroy(): void {
    this.editor.destroy();
  }
}

for v5, schema creation is same. Schema should be defined via module

NgxEditorModule.forRoot({
  schema
})

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to 16892 Developer Community-Open, Learning and Share
...