使用框架版本: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()实现
具体实现看上述代码或者自行百度。