响应式表单打字稿 CKEDITOR CustomValueModule

Jef*_*son 6 forms ckeditor typescript reactive angular

我正在尝试将此 CustomValueModule 转换为 CKEDITOR 控件,但我收到一个错误,指出该标签不受支持。组件模板是一个 div 标签,所以我不确定为什么会出现此错误。

https://stackblitz.com/edit/angular-ivy-5kvfys

错误

EXCEPTION: The specified element mode is not supported on element: "editor".
Run Code Online (Sandbox Code Playgroud)

看法

<Editor 
        [formControl]="controlGroup.controls.value" >
</Editor>
Run Code Online (Sandbox Code Playgroud)

成分

import { Component, forwardRef } from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';

@Component({
    selector: 'Editor',
    providers: [
        {
            provide: NG_VALUE_ACCESSOR,
            useExisting: forwardRef(() => Editor),
            multi: true
        }
    ],
    template: `<div [attr.id]="editorId" contenteditable="true"
                style="width: 100% !important; overflow: hidden"
                class="form-control sentence-part-values-inline sentence-part-values-inline-textbox-number">
                </div>`,
})
export class Editor implements ControlValueAccessor {
    constructor() { }

    onChange: any = () => { }
    onTouch: any = () => { }
    val = ""

    set value(val) {
        if (val !== undefined && this.val !== val) {
            this.val = val
            this.onChange(val)
            this.onTouch(val)
        }

    }

    writeValue(value: any) {
        this.value = value
    }

    registerOnChange(fn: any) {
        this.onChange = fn
    }

    registerOnTouched(fn: any) {
        this.onTouch = fn
    }
}
Run Code Online (Sandbox Code Playgroud)

成分

ngAfterViewInit() {

this.ngZone.runOutsideAngular(() => {
    (<any>window).CKEDITOR.config.autoParagraph = false;
    if (!(<any>window).CKEDITOR.instances[this.editorId]) {
Run Code Online (Sandbox Code Playgroud)

更新

initControlGroup(fb: FormBuilder) : FormGroup {
    return fb.group({
        "value": [""]            
    });
}

public form: FormGroup = this.formBuilder.group({
    editorValue: ["",Validators.required]
});
Run Code Online (Sandbox Code Playgroud)

删除公共表单时出错:FormGroup 并且只有 initControlGroup

EXCEPTION: formGroup expects a FormGroup instance. Please pass one in.

       Example:


    <div [formGroup]="myGroup">
      <input formControlName="firstName">
    </div>

    In your class:

    this.myGroup = new FormGroup({
       firstName: new FormControl()
    });
Run Code Online (Sandbox Code Playgroud)

Hus*_*kar 3

如果您想在这里实现的是创建编辑器,您可以将其值绑定到反应形式,我正是这么做的。

我发现您的代码存在一些问题。因此,为了提供帮助,我用注释重新编写了代码,以便您可以从中受益。

完整的工作代码: https://stackblitz.com/edit/angular-ivy-wv9vdi

  • stackblitz 链接已损坏 (2认同)