Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)


Posted in Javascript onMay 26, 2020

1. TinyMCE简介

TinyMCE是一个轻量级的富文本编辑器,相对于CK编辑器更加精简,但必须满足绝大部分场景的需要。

2.安装和配置TinyMCE

2.1安装TinyMCE

npm install-保存tinymce

2.2设置tinymce局部访问(.angular-cli.json)

"scripts": [
  "../node_modules/_tinymce@4.7.4/tinymce.js",
  "../node_modules/_tinymce@4.7.4/themes/modern/theme.js",
  "../node_modules/_tinymce@4.7.4/plugins/link/plugin.js",
  "../node_modules/_tinymce@4.7.4/plugins/paste/plugin.js",
  "../node_modules/_tinymce@4.7.4/plugins/table/plugin.js"
 ],

2.3定义变量

在项目中的typing.d.ts中

声明tinymce

变量,不然会提示发现tinymce

声明var tinymce:任何;

2.4拷贝皮肤文件到资产目录下

Linux和MacOS

cp -r node_modules / tinymce / skins src / assets / skins

2.5安装中文支持

中文语言包可以从这个地址下载:

https://www.tinymce.com/downl ...

下载下来的压缩文件中会有一个langs目录,里面有zh_CN.js,把这个目录复制到src / assets目录下,然后在上下中添加引用(.angular-cli.json):

“ scripts”:[

"../node_modules/_tinymce@4.7.4/tinymce.js",
 "../node_modules/_tinymce@4.7.4/themes/modern/theme.js",
 "../node_modules/_tinymce@4.7.4/plugins/link/plugin.js",
 "../node_modules/_tinymce@4.7.4/plugins/paste/plugin.js",
 "../node_modules/_tinymce@4.7.4/plugins/table/plugin.js",
 "../src/assets/langs/zh_CN.js"复制代码
],

3.创建TinyMCE组件

ng gc myeditor

import {
 Component,
 AfterViewInit,
 EventEmitter,
 OnDestroy,
 Input,
 Output
} from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';

@Component({
 selector: 'tiny-editor',
 templateUrl: './tiny-editor.component.html',
 styleUrls: ['./tiny-editor.component.css']
})
export class TinyEditorComponent implements AfterViewInit, OnDestroy {
 @Input() elementId: String;
 @Output() onEditorContentChange = new EventEmitter();

 editor;

 constructor() { }

 ngAfterViewInit() {
  let self = this;
  tinymce.init({
   selector: '#' + this.elementId,
   height: 600,
   plugins: ['link', 'table', 'image'],
   skin_url: 'assets/skins/lightgray',
   setup: editor => {
    this.editor = editor;
    editor.on('keyup change', () => {
     const content = editor.getContent();
     this.onEditorContentChange.emit(content);
    });
   }
  });
 }

 ngOnDestroy() {
  tinymce.remove(this.editor);
 }

}
// tiny-editor.component.html
<textarea id="{{elementId}}">
</textarea>

4.使用自定义TinyMCE组件

<tiny-editor [elementId]="'defined-tinymce-editor'">
</tiny-editor>

5.增加图片上传功能

import {
 Component,
 AfterViewInit,
 EventEmitter,
 OnDestroy,
 Input,
 Output
} from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';

@Component({
 selector: 'tiny-editor',
 templateUrl: './tiny-editor.component.html',
 styleUrls: ['./tiny-editor.component.css']
})
export class TinyEditorComponent implements AfterViewInit, OnDestroy {
 @Input() elementId: String;
 @Output() onEditorContentChange = new EventEmitter();
 editor;
 constructor(private http: HttpClient) { }
 ngAfterViewInit() {
  let self = this;
  tinymce.init({
   selector: '#' + this.elementId,
   height: 600,
   plugins: ['link', 'table', 'image'],
   skin_url: 'assets/skins/lightgray',
   setup: editor => {
    this.editor = editor;
    editor.on('keyup change', () => {
     const content = editor.getContent();
     this.onEditorContentChange.emit(content);
    });
   },
   // 图片上传功能
   images_upload_handler: function(blobInfo, success, failure) {
    var formData;
    formData = new FormData();
    console.log(blobInfo);
    formData.append("file", blobInfo.blob(), blobInfo.filename());
    console.log(formData);
    self.uploadFile('http://www.seenode.com/index/player/upload', formData).subscribe( response => {
     let url = response['data']['imagePath'];
     success(url);
    });
   }
  });
 }
 // 上传图片
 private uploadFile(url: string, formData: any) {
  var self = this;
  var headers = new HttpHeaders();
  headers.set("Accept", "application/json");
  return self.http.post(url, formData, { headers: headers });
 }

 ngOnDestroy() {
  tinymce.remove(this.editor);
 }
}

6.获取和设置编辑器内容

<tiny-editor 
 [elementId]="'defined-tinymce-editor'"
 (onEditorContentChange)="keyupHandler($event)"></tiny-editor>复制代码
// 监听onEditorKeyup事件
private keyupHandler(event) {
 console.log('编辑器的内容:', event);
}

总结

到此这篇关于Angular5整合富文本编辑器TinyMCE(汉化+上传)的文章就介绍到这了,更多相关Angular5整合富文本编辑器TinyMCE(汉化+上传)内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
为指定元素增加样式的js代码
Dec 09 Javascript
js 上传图片预览问题
Dec 06 Javascript
javascript中声明函数的方法及调用函数的返回值
Jul 22 Javascript
JS实现仿新浪黄色经典滑动门效果代码
Sep 27 Javascript
利用jQuery对无序列表排序的简单方法
Oct 16 Javascript
Javascript实现汉字和拼音互转的终极方案
Oct 19 Javascript
JavaScript严格模式下关于this的几种指向详解
Jul 12 Javascript
Angular实现较为复杂的表格过滤,删除功能示例
Dec 23 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
Jul 03 jQuery
微信小程序实现留言板
Oct 31 Javascript
详解async/await 异步应用的常用场景
May 13 Javascript
vue项目两种方式实现竖向表格的思路分析
Apr 28 Vue.js
js校验开始时间和结束时间
May 26 #Javascript
vue实现简单跑马灯效果
May 25 #Javascript
Js和VUE实现跑马灯效果
May 25 #Javascript
Vue实现简单的跑马灯
May 25 #Javascript
Vue实现跑马灯效果
May 25 #Javascript
JavaScript实现移动端弹窗后禁止滚动
May 25 #Javascript
ES2020 已定稿,真实场景案例分析
May 25 #Javascript
You might like
PHP编程中字符串处理的5个技巧小结
2007/11/13 PHP
PHP操作数组的一些函数整理介绍
2011/07/17 PHP
用php实现选择排序的解决方法
2013/05/04 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
2015/04/15 PHP
PHP中include/require/include_once/require_once使用心得
2016/08/28 PHP
PHP使用strrev翻转中文乱码问题的解决方法
2017/01/13 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
2018/11/22 PHP
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
2015/04/13 Javascript
详解AngularJS 模态对话框
2016/04/07 Javascript
AngularJS 依赖注入详解及示例代码
2016/08/17 Javascript
Angular.JS学习之依赖注入$injector详析
2016/10/20 Javascript
jstree的简单实例
2016/12/01 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
jQuery实现的简单动态添加、删除表格功能示例
2017/09/21 jQuery
基于Bootstrap表单验证功能
2017/11/17 Javascript
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
[01:47]2018年度DOTA2最佳教练-完美盛典
2018/12/16 DOTA
python的类变量和成员变量用法实例教程
2014/08/25 Python
Django中几种重定向方法
2015/04/28 Python
轻松掌握python设计模式之策略模式
2016/11/18 Python
利用Python脚本生成sitemap.xml的实现方法
2017/01/31 Python
Python读取MRI并显示为灰度图像实例代码
2018/01/03 Python
对python中的pop函数和append函数详解
2018/05/04 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
django 配置阿里云OSS存储media文件的例子
2019/08/20 Python
python中dict()的高级用法实现
2019/11/13 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
2020/03/18 Python
python 弧度与角度互转实例
2020/04/15 Python
利用PyTorch实现VGG16教程
2020/06/24 Python
工作作风建设心得体会
2014/10/22 职场文书
运动会主持人开幕词
2016/03/04 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
如何理解Vue简单状态管理之store模式
2021/05/15 Vue.js