当前位置:   article > 正文

LayUI - 富文本编辑器_layui 富文本

layui 富文本

一个做后端的猿,难免用到LayUI,首先在这里,不推荐使用,坑多

我这里用的是layui-v2.5.7版本

一、富文本编辑器

缺点:功能太少,只能满足简单需求,只有下面这几个功能

废话少说,直接丢代码

html部分

  1. <link rel="stylesheet" href="layui/css/layui.css">
  2. <script src="layui/layui.js"></script>
  3. <div>
  4. <!-- 引入layui语法 -->
  5. <textarea class="layui-textarea" id="myText" name="content" style="display: none;"> </textarea>
  6. </div>
  7. <button id="addBtu" type="button" class="layui-btn">提交</button>

js部分

  1. /**
  2. * 定义初始化内容
  3. */
  4. var returnContent;
  5. /**
  6. * LayUI操作
  7. */
  8. layui.use(['form', 'layer', 'layedit','upload'], function(){
  9. //定义layedit
  10. var layedit = layui.layedit;
  11. //上传图片,必须放在"创建一个编辑器"前面
  12. //layedit.set一定要放在 layedit.build 前面,否则配置全局接口将无效。
  13. layedit.set({
  14. uploadImage: {
  15. url: 'api/upload',//接口url
  16. type: 'post', //默认post
  17. data: {
  18. uid: uid
  19. }
  20. }
  21. });
  22. //建立编辑器
  23. var editIndex = layedit.build('myText',{
  24. height: 500 //设置编辑器高度
  25. });
  26. layedit.sync(editIndex);
  27. /**
  28. * 添加富文本框数据
  29. */
  30. $('#addBtu').click(function () {
  31. layedit.sync(editIndex);
  32. var text = $("#myText").val()
  33. $.ajax({
  34. url: baseURL + "api/add",
  35. data:{
  36. content: text,
  37. uid: uid
  38. },
  39. success: res=>{}
  40. })
  41. });
  42. /**
  43. * 初始化富文本框数据
  44. */
  45. getText()
  46. //初始化值
  47. layedit.setContent(editIndex, returnContent);
  48. //获取认证数据
  49. function getText() {
  50. $.ajax({
  51. url: baseURL + "api/get",
  52. type: "post",
  53. async: false,
  54. data: {
  55. uid: uid
  56. },
  57. success: res=>{
  58. data = res.data;
  59. returnContent = data.content;
  60. }
  61. })
  62. }
  63. });

第一个坑:

LayUI这个上传图片的时候(这个在文档中提到的)

layedit.set一定要放在 layedit.build 前面,否则配置全局接口将无效。

第二个坑:

上传图片的时候,如果 调用 api/upload 的时候会发现,data传参是接收不到的,因为LayUI不支持传图片的同时也传参数。如果想实现我上面那样传data

  1. layedit.set({
  2. uploadImage: {
  3. url: baseURL + 'api/upload',//上传图片接口url
  4. type: 'post', //默认post
  5. data: {
  6. uid: uid
  7. }
  8. }
  9. });

就得去改layui的源码了,很简单!!

找到 layedit.js 文件

找到 “ uploadImage ”这个名称,在里面添加一句代码: data: r.data,

这样就能往后端传值了

后端代码接口:

1. 我这里就只提供下富文本编辑器中上传图片的接口,接口的路径需要根据需求来自己定义

2. 富文本编辑器生成的就是一个字符串,后台就和接收input数据一样,使用String接收就可以了,这里就不叙述了

3. 剩余接口就按照你们的需求正常Ajax传就OK了

  1. import com.alibaba.fastjson.JSONObject;
  2. import io.lettuce.core.dynamic.annotation.Param;
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.CrossOrigin;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.ResponseBody;
  7. import org.springframework.web.multipart.MultipartFile;
  8. import javax.servlet.http.HttpServletRequest;
  9. import java.io.File;
  10. import java.io.IOException;
  11. import java.text.SimpleDateFormat;
  12. import java.util.Date;
  13. import java.util.HashMap;
  14. import java.util.Map;
  15. /**
  16. * 富文本插入图片接口
  17. */
  18. @Controller
  19. @RequestMapping(value = "/api")
  20. @CrossOrigin
  21. public class FileController {
  22. /**
  23. * 上传图片方法
  24. */
  25. @RequestMapping(value = "/upload")
  26. @ResponseBody
  27. public String uploadFile(HttpServletRequest request, @Param("file") MultipartFile file) throws IOException {
  28. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS");
  29. String dateStr = sdf.format(new Date());
  30. //原始名称
  31. String originalFilename = file.getOriginalFilename();
  32. //新的文件名称
  33. String newFileName = dateStr + originalFilename.substring(originalFilename.lastIndexOf("."));
  34. //新文件
  35. File newFile = new File("D:/nginx-1.8.0/html/picture" + File.separator + newFileName);
  36. //判断目标文件所在的目录是否存在
  37. if (!newFile.getParentFile().exists()) {
  38. //如果目标文件所在的目录不存在,则创建父目录
  39. newFile.getParentFile().mkdirs();
  40. }
  41. System.out.println(newFile);
  42. //将内存中的数据写入磁盘
  43. file.transferTo(newFile);
  44. // 前缀自己根据需要加
  45. String fileUrl = "/picture/" + newFileName;
  46. //封装结果集
  47. Map<String, Object> map = new HashMap<String, Object>();
  48. //图片url
  49. //0表示成功,1失败
  50. map.put("code", 0);
  51. //提示消息
  52. map.put("msg", "上传成功");
  53. map.put("data", fileUrl);
  54. String result = new JSONObject(map).toString();
  55. return result;
  56. }
  57. }

番外篇

如果想有更好的用户体验,我建议还是换一个富文本编辑器

功能齐全的几款:

CKEditor

官方文档:CKEditor 5 documentationLearn how to install, integrate, update, configure and develop CKEditor 5. Browse through API documentation and online samples.https://ckeditor.com/docs/ckeditor5/latest/

TinyMCE

官方文档:TinyMCE中文文档中文手册http://tinymce.ax-z.cn/

UEditor

这个是百度开发团队搞的,功能很齐全,跟word一样,但是它断更了,官方文档很多也打不开了,挺尴尬的,想死磕UEditor仔细拼凑下网上的资料,也不是不可以。或者换成UMEditor

 官方文档:UEditor Docshttp://fex.baidu.com/ueditor/

 Froala

官方文档可能打开有点慢

官方文档:Get Started - FroalaThere are many ways to install Froala WYSIWYG Editor and we suggest to use NPM. Type in the command given here. Click here to see the rest of the steps.https://froala.com/wysiwyg-editor/docs/overview/

中规中举的几款:

这几款我就不放图了,功能少,但是主要的几个还是有的

kindEditorwangEditorsimditorsummernote

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/155722
推荐阅读
相关标签