angularjs利用指令调用ueditor百度编辑器

ueditor中文是百度编辑器,而angularjs是一款优秀的前端JS框架了,下面我们来介绍在angularjs调用ueditor百度编辑器例子,有兴趣的可一起来看看。

一直以来,angularjs的富文本编辑器都比较难做,主要是第三方的编辑器很难集成进来,今天花时间研究了一下,发现ueditor主要加载两个js文件

ueditor.config.js

ueditor.all.js

能不能把这两个文件异步加载呢?答案是肯定的。我们新建一个服务用来异步加载资源,并设置必要的回调方法。

服务代码:

services.factory(‘Common‘, [
  ‘$http‘, ‘$q‘, function($http, $q) {
   return {
    loadScript: function(url, callback) {
     var head = document.getElementsByTagName("head")[0];
     var script = document.createElement("script");
     script.setAttribute("type", "text/javascript");
     script.setAttribute("src", url);
     script.setAttribute("async", true);
     script.setAttribute("defer", true);
     head.appendChild(script);
     //fuck ie! duck type
     if (document.all) {
      script.onreadystatechange = function() {
       var state = this.readyState;
       if (state === ‘loaded‘ || state === ‘complete‘) {
        callback && callback();
       }
      }
     }
     else {
      //firefox, chrome
      script.onload = function() {
       callback && callback();
      }
     }
    },
    loadCss: function(url) {
     var ele = document.createElement(‘link‘);
     ele.href = url;
     ele.rel = ‘stylesheet‘;
     if (ele.onload == null) {
      ele.onload = function() {
      };
     }
     else {
      ele.onreadystatechange = function() {
      };
     }
     angular.element(document.querySelector(‘body‘)).prepend(ele);
    }
   }
  }
 ]);

通过绑定callback到 onload 事件来实现回调。

接下来是指令部分:

directives.directive(‘ueditor‘, [
  ‘Common‘,
  ‘$rootScope‘,
  function(Common, $rootScope) {
   return {
    restrict: ‘EA‘,
    require: ‘ngModel‘,
    link: function(scope, ele, attrs, ctrl) {
     $rootScope.$emit(‘loading‘, ‘初始化编辑器...‘);//广播loading事件,可以删除
     var _self = this,
       _initContent,
       editor,
       editorReady = false,
       base = ‘/public/vendor/utf8_qiniu_ueditor-master‘, //ueditor目录
       _id = attrs.ueditor;
     var editorHandler = {
      init: function() {
       window.UEDITOR_HOME_URL = base + ‘/‘;
       var _self = this;
       if (typeof UE != ‘undefined‘) {
        editor = UE.getEditor(_id, {
         toolbars: [
          [
           ‘fontsize‘, ‘|‘,
           ‘blockquote‘, ‘horizontal‘, ‘|‘,
           ‘removeformat‘, ‘|‘,
           ‘insertimage‘, ‘|‘,
           ‘bold‘, ‘italic‘, ‘underline‘, ‘forecolor‘, ‘backcolor‘, ‘|‘,
           ‘justifyleft‘, ‘justifycenter‘, ‘justifyright‘, ‘justifyjustify‘,
           ‘rowspacingtop‘, ‘rowspacingbottom‘, ‘lineheight‘, ‘|‘,
           ‘insertorderedlist‘, ‘insertunorderedlist‘, ‘|‘,
           ‘link‘, ‘unlink‘, ‘|‘,
           ‘emotion‘
          ]
         ]
        });
        editor.ready(function() {
         editor.setHeight(500);
         editorReady = true;
                                                                        $rootScope.$emit(‘loading‘, ‘‘);//编辑器初始化完成
         editor.addListener(‘contentChange‘, function() {//双向绑定
          if (!scope.$$phase) {
           scope.$apply(function() {
            ctrl.$setViewValue(editor.getContent());
           });
          }
         });
        });
       }
       else {
        Common.loadScript(base + ‘/ueditor.config.js‘, null);
        Common.loadScript(base + ‘/ueditor.all.min.js‘, function() {
         _self.init();
        });
       }
      },
      setContent: function(content) {
       if (editor && editorReady) {
        editor.setContent(content);
       }
      }
     };
     ctrl.$render = function() {
      _initContent = ctrl.$isEmpty(ctrl.$viewValue) ? ‘‘ : ctrl.$viewValue;
      editorHandler.setContent(_initContent);//双向绑定
     };
     editorHandler.init();
     //事件
     $rootScope.$on(‘$routeChangeStart‘, function() {
      editor && editor.destroy();
     });
    }
   }
  }
 ]);

由于angularjs无法自动获得编辑器内容,只能手动监听 contentChange事件来实现双向绑定。

模板代码:

<div ueditor="editor" ng-required="true" ng-model="material.content.content" id="editor"></div> 

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 09:37:10

angularjs利用指令调用ueditor百度编辑器的相关文章

dedecms织梦添加ueditor百度编辑器(支持本地图片水印)

本站所有附件均为UTF-8版本,GBK版本的童学请自行转码: 教程最下面有解决栏目内容添加失败的解决方法和本地上传图片加水印方法. 最终效果 1.直接到百度编辑器官方下载PHP对应的版本 ueditor官方地址:http://ueditor.baidu.com/website/download.html 2.dedecms 程序 include文件夹下,创建 ueditor 文件夹 把下载到的ueditor文件扔进去(index.html不要) 3.include\inc\inc_fun_fun

ueditor 百度编辑器 配置如何上传图片

1.准备工作 下载地址  http://ueditor.baidu.com/website/ 下载出来 你所需要的udditor版本 2.解压出来 3.导包 解压出来文件jsp下的lib导入  到项目中web-inif 下的lib中 注意: 如果导入包仍然报 inser... server  ... 这种错误,把包导入 服务器 lib下 4.修改配置文件 ueditor.config.js window.UEDITOR_HOME_URL = "/default/eos/"; 从注释中取

Ueditor百度编辑器中的 setContent()方法的使用

百度编辑器Ueditor所提供的setContent()方法作用是:设置或者改变编辑器里面的文字内容或html内容 函数说明:setContent(string,boolean); 参数string 是需要设置到编辑器里面的内容,可以含有HTML代码,最后插入到编辑器中的内容是经过 编辑器内置过滤器过滤后的内容,同时该函数会出发selectionchange 事件. 参数:boolean,(true/false) true表示清空编辑器俩面的内容,在内容后面添加内容,不传,默认是true:fal

ueditor 百度编辑器,自定义右键菜单

如图:有2种自定义方法,一种是改源码,一种是初始化 初始化,如下代码: var ue = UE.getEditor('XXXid',{ // contextMenu:[ {label:'', cmdName:'selectall'}, { label:'', cmdName:'cleardoc', exec:function () { this.execCommand( 'cleardoc' ); } }, {label:'这里添加一个菜单',cmdName:'cleardoc', icon:'

UEditor百度编辑器,工具栏添加一个普通按钮

添加一个名叫“hougelou”的普通按钮 附言:以下是以UEditor .Net版本举例说明. 第一步:找到ueditor.config.js文件中的toolbars数组,增加一个“hougelou”字符串,然后找到labelMap数组,对应着添加一个labelMap,用于鼠标移上按钮时的提示. //工具栏上的所有的功能按钮和下拉框,可以在new编辑器的实例时选择自己需要的从新定义 , toolbars:[ ['fullscreen', 'source', '|', 'undo', 'redo

ueditor 百度编辑器 自定义图片上传路径和格式化上传文件名

今天项目中需要自定义图片上传的保存路径,并且不需要按照日期自动创建存储文件夹和文件名,我的ueditor版本是1.3.6.下面记录一下我配置成功的方法,如果有什么不对的地方欢迎指出,共同学习: 1:我在本地项目的根目录下新建一个文件夹,比如:upload. 2:打开ueditor/php/config.php,改成如下代码后保存: <?php return array( //图片上传允许的存储目录 /*'imageSavePath' => array ( 'upload1', 'upload2

ueditor百度编辑器中,多图上传后,图片顺序乱掉的处理方法

上传后,图片的顺序和预期的不一致,需要修改ueditor的源码. 一.找到editor/dialogs/attachment/attachment.js文件 1.将_this.fileList.push(json);修改为_this.fileList[$file.index()] = json; 2.考虑上传失败的情况,加上一个判断,避免在上传失败后,数组中出现undefined项 二.找到editor/dialogs/image/image.js文件 1.将_this.imageList.pu

thinkphp 对百度编辑器里的内容进行保存

模板代码 <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>ueditor demo</title> </head> <body> <!-- 加载编辑器的容器 --> <script id="container" name="co

百度编辑器Ueditor的简单调用

先去ueditou.baidu.com网站下载百度编辑器,放到项目根目录下的Data目录中,然后引入文件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script> window.UEDITOR_HOME_URL='__ROOT__/Data/Uedit