Angular中集成富文本编辑器插件—KindEditor

本文介绍了如何在Angular15项目中集成KindEditor富文本编辑器,包括下载编辑器、部署到assets文件夹、创建HTML页面以及在组件中使用iframe嵌入。同时,文章详细讲解了通过postMessage方法实现父页面与子页面间的数据传递。
摘要由CSDN通过智能技术生成

使用框架版本:Angular15+

1、下载编辑器KindEditor

下载地址

2、部署编辑器

解压 kindeditor-x.x.x.zip 文件,将所有文件复制到assets文件夹下
在这里插入图片描述
您可以根据需求删除以下目录。
asp - ASP程序
asp.net - ASP.NET程序
php - PHP程序
jsp - JSP程序
examples - 演示文件

3、 添加HTML页面

在 assets\kindeditor\ 下添加html文件
在这里插入图片描述
文件代码如下:

<!DOCTYPE html>
<html style="height: 100%">

<head>
  <meta charset="utf-8">
  <!-- 富文本编辑器 -->
  <link rel="stylesheet" href="./kindeditor-utils/themes/default/default.css" />
  <link rel="stylesheet" href="./kindeditor-utils/plugins/code/prettify.css" />
  <script charset="utf-8" src="./kindeditor-utils/kindeditor-all.js"></script>
  <script charset="utf-8" src="./kindeditor-utils/lang/zh-CN.js"></script>
  <script charset="utf-8" src="./kindeditor-utils/plugins/code/prettify.js"></script>
  <script src="jquery.min.js"></script>
  <script type="text/javascript">
    // 关闭过滤模式,保留所有标签
    KindEditor.options.filterMode = false;
    var editor;
    KindEditor.ready(function (K) {
      editor = K.create('textarea[name="content"]', {
        allowFileManager: true
      });
    });
    //接收父页面传过来的数据
    window.addEventListener('message', function (event) {
      if (event.data === 'addOredit') {
        //把数据传递给父页面
        editor.sync();
        html = document.getElementById('editor_id').value; // jQuery
        window.parent.postMessage(html, '*');
      } else {
        // 设置HTML内容
        editor.html(event.data);
      }
    }, false);
  </script>
</head>

<body style="height: 100%; margin: 0">
  <textarea id="editor_id" name="content" style="width:100%;height:400px;visibility:hidden;"></textarea>
</body>

</html>

4、在需要富文本编辑器的组件中使用iframe嵌入html文件

.html文件:

<div style="height: 400px;">
    <iframe height="100%" width="100%" frameborder="no" allowfullscreen="true" id='iframeId' name="iframeName" [src]="this.slideUrl"></iframe>
</div>
<button nz-button nzType="primary" [disabled]="!validateForm.valid"(click)="submitForm()">提交</button>

.ts文件:

import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup } from '@angular/forms';
import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';

@Component({
  selector: 'app-my-editor',
  templateUrl: './my-editor.component.html',
  styleUrls: ['./my-editor.component.less']
})
export class MyEditorComponent implements OnInit {

  fileUrl = 'assets/kindeditor/kindeditor.html';
  slideUrl!: SafeResourceUrl;
  validateForm!: FormGroup;
  content: any;
  
  constructor(private sanitizer: DomSanitizer, private fb: FormBuilder) { }

  ngOnInit(): void {
    this.slideUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.fileUrl);
  }
  
  ngOnDestroy() {
    window.removeEventListener('message', this.treatmentContents);//移除监听事件
  }

  //处理iframe嵌套页面之间的数据传递
  iframeData() {
    const that = this;
    //传递数据到子页面
    var iframe = (document?.querySelector('#iframeId') as HTMLIFrameElement);
    iframe.contentWindow?.postMessage('addOredit', that.slideUrl);
    //接受子页面传递过来的数据
    window.addEventListener('message', this.treatmentContents, false);
  }

  treatmentContents = (event) => {
    this.content = event.data;
  }
  
  //详情
  Detail() {
  //调后台接口取到想要传递到子页面的数据
  
     //传递数据到子页面
     const that = this;
     var iframe = (document?.querySelector('#iframeId') as HTMLIFrameElement);
     iframe.onload = function () {
     	iframe.contentWindow?.postMessage(re.xx.xxx, that.slideUrl);
     }
  }
  submitForm() {
  //调接口添加或修改之前需要处理一下数据
    this.iframeData();
  }

}

5、父页面跟子页面之前的数据传递通过postMessage()实现

具体实现看上述代码或者自行百度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值