QuillJS объединяет последующие p-теги в один с Angular 7 + ngx-quill
Я просто интегрировал quilljs в свое приложение. Единственная проблема, с которой я сталкиваюсь сейчас - это странное поведение с p-тегами.
Например, в моем компоненте я настраиваю реактивную форму:
this.fullDocumentFormGroup = new FormGroup({
fullDocument: new FormControl('<p>some</p><p>html</p>', [Validators.required])
});
И в шаблоне:
<form [formGroup]="fullDocumentFormGroup" class="full-document">
<quill-editor placeholder="Detailed documentation of your invention here..."
[style]="{'min-height': '250px'}"
bounds="self"
formControlName="fullDocument"
[readOnly]="isProjectLocked()">
</quill-editor>
</form>
Этот код в конечном итоге устанавливает содержимое редактора следующим образом:
<p>somehtml</p>
Я проверил это с textarea, чтобы проверить, удаляет ли реактивная форма это, и это не так.
Попробовал добавить атрибут в quill-редактор [sanitize]="true"
=> ничего не меняется.
Что мне не хватает?
ДРУГАЯ МЫСЛЬ
Возможно, он удаляет все теги и просто оборачивает содержимое p
теги. Однако, если я добавлю еще один
'между абзацами, он остается правильно отформатированным.
5 ответов
Недавно я столкнулся с этой проблемой, которая в основном проявлялась, когда редактор перьев визуализировался во вкладках или шагах. Решение, которое я использовал, - использовать*ngIf
отображать редактор перьев только тогда, когда он находится в поле зрения (альтернатива - запустить его при afterViewInit
если то, что я сделал, не совсем подходит вашему проекту)
т.е. в моем случае я использую mat-tabs
чтобы показать разные взгляды. Я получаю индекс вкладки с:
<mat-tab-group [selectedIndex]="tabIndex" (selectedIndexChange)="changeIndex($event)">
ts:
changeIndex(index) {
this.tabIndex = index;
}
А затем в компоненте установите его для отображения только тогда, когда tabIndex равен '1'
<ngx-quill *ngIf="tabIndex==1"> </ngx-quill>
У меня была такая же проблема с пользовательским интерфейсом Nebular, используя NbTabsetComponent и ngx-quill, и я решил с помощью lazyload prop в компоненте nb-tab. Я думаю, что это же решение (используйте lazyload) работает с другим компонентом tabset.
<nb-tabset>
<nb-tab lazyload>
<quill-editor
[modules]="editor_modules"
[(ngModel)]="content"
></quill-editor>
</nb-tab>
</nb-tabset>
У меня была та же проблема, и я решил ее, просто используя тайм-аут перед установкой данных в форму.
Я исправил это поведение, используя хак с использованием:
В HTML:
<quill-editor formControlName="fullDocument"></quill-editor>
Когда вы устанавливаете это поле в обертке машинописного текстаpatchValue
с использованиемsetTimeout
:
setTimeout(() => {
formGroup.patchValue({fullDocument: fullDocumentHtml});
});
Я даже пытался изменить разделитель строк с<p>
к<div>
в конфиге Quill, но это совсем не помогло :).
Для более новой версии Nebular UI (>7.0) используйте
lazyLoad
(случай верблюда)
<nb-tabset>
<nb-tab lazyLoad>
<quill-editor
...
></quill-editor>
</nb-tab>
</nb-tabset>