【问题标题】:How can I add html tag to the content div of Quill text editor in Angular?如何在 Angular 中将 html 标签添加到 Quill 文本编辑器的内容 div?
【发布时间】:2019-04-29 07:21:42
【问题描述】:

我有一个带有羽毛笔文本编辑器的表单。

<quill-editor [modules]="quillConfig" (onEditorCreated)="getEditorInstance($event)"></quill-editor>

我在模态中有一个图像库,里面装满了我的图像,我希望这样,如果我从模态中选择一个图像,则将 img 标签放在编辑器中的文本之后。

这是我要添加的一张图片的代码:

<div class="news-image-box">
  <img src="${image.path}" alt="${image.description}">
  <div class="row">
    <div class="col-md-9"><p>${image.description}</p></div>
    <div class="col-md-3 news-image-credit"><p>${image.credit}</p></div>
  </div>
</div>

我的问题是生成了 Quill 的 contenteditable div(这是我的文本的 div,它具有“ql-editor”css 类),所以我无法提供使用 @ViewChild 的本地参考... (或者我不知道怎么做)

document.getElementsByClassName('ql-editor')[0].innerHTML += imageElement;

我试图通过示例 getElementsByClassname 获取“ql-editor” div 的内容,然后将我的 img 标签添加到其中,但是角度会引发此错误:

core.js:1673 ERROR TypeError: Cannot read property 'emit' of undefined
at Scroll.update (quill.js:4329)
at MutationObserver.<anonymous> (quill.js:7118)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:388)
at Object.onInvoke (core.js:3820)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:387)
at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runGuarded (zone.js:151)
at MutationObserver.<anonymous> (zone.js:129)

顺便说一句,我只使用一个字符串...

document.getElementsByClassName('ql-editor')[0].innerHTML += 'something';

【问题讨论】:

  • 在附加到innerHTML之前,您是否尝试过将元素转换为字符串?
  • 是的,情况相同,或者在

    标签内的“”之间添加:/

标签: javascript html angular quill ngx-quill


【解决方案1】:

您可以使用 ngModel,文档中明确提到了它。 参考: ngx-quill git Repo

示例代码段:

 <quill-editor [(ngModel)]="productDetail"  [style]="{border: '0px'}"></quill-editor>

【讨论】:

  • 谢谢!它几乎完美地工作! :) 最后添加了图像,但没有 div 标签...我在文档中找到了 sanitize 选项,但我该如何使用它?我尝试过这种方式:&lt;quill-editor [(ngModel)]="contentText" [sanitize]="false" [ngModelOptions]="{standalone: true}" [modules]="quillConfig" (onEditorCreated)="getEditorInstance($event)"&gt;&lt;/quill-editor&gt; ... 但它会引发此错误:`ng: Can't bind to 'sanitize' because it is not an known property of 'quill-editor'.
  • 您使用的是哪个版本的 quil?
  • 消毒仅在 V3.3.0 及更高版本中支持。参考:github.com/KillerCodeMonkey/ngx-quill/issues/198
  • 我有“ngx-quill”:“^4.1.0”和“quill”:“^1.3.6”。我认为这是最新的。
  • 哇!非常感谢您的帮助!我修改了你的代码。如果单击按钮,您可以看到将添加图像,但没有 div...stackblitz.com/edit/ngx-quill-dxmifr
【解决方案2】:

如果我理解您的问题,您想在您的quill-editor 中添加一个img 标签。

如果您想这样做,修改Element.innerHTML 属性是一个好方法,但有点复杂。它存在更简单的方法来做到这一点,如 Element.insertBefore()Element.append()

你可以像这样使用它们:

document.getElementsByClassName('ql-editor')[0].append(imageElement);

或者

document.getElementsByClassName('ql-editor')[0].insertBefore(imageElement, null);

如果你真的想使用Element.innerHTML,我邀请你看看the documentation关于这个属性。

希望对你有帮助

编辑:语法

【讨论】:

  • 谢谢你的回答,但是这个解决方案的问题是html标签像字符串一样添加,所以当我从数据库中读取它时,它不会是html标签,而是

    标签中的字符串。我当然用过 [innerHtml]。

猜你喜欢
  • 1970-01-01
  • 2021-08-05
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 2020-01-05
  • 1970-01-01
相关资源
最近更新 更多