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-03 00:18:57

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

thinkphp整合ueditor(百度编辑器)方法详解

本人使用的是百度富文本编辑器ueditor 1.2.4.0 PHP 版本 下面说一下thinkphp 中整合ueditor 步骤1:下载百度编辑器http://ueditor.baidu.com/website/ipanel/panel.html 步骤2:解压后重新命名文件夹为ueditor放在项目公共目录 我放在Public/ueditor下 步骤3: 在add.html中引入公共文件  代码如下 复制代码 <SCRIPT type="text/javascript" src=

ueditor百度编辑器去掉图片的在线管理(1/2)

具体方法 首先找到dialogs/image/中的image.html 删除代码  代码如下 复制代码 <span tabSrc="imgManager"><var id="lang_tab_imgManager"></var></span> 然后找到image.js中的  代码如下 复制代码 if ( id == "imgManager" ) { list.style.display = &quo

UEditor百度编辑器源代码状态下无法保存内容解决办法

不知道这是BUG还是UE本身的产品设计,但是真的很容易让人造成困扰,所以还是决定改一下,说是改其实也等于取巧在JS中做了一下处理,方便,又不涉及源码. 修改分为两部分: 1)把当前的编辑器form表单提交修改为Javascript方式提交. <form action="index.php" method="POST"  name="myForm"> form表单加入name元素. <button class="btn2

ueditor百度编辑器配置和事件监听

渲染指定功能这个在官方我没有知道说明,加入监听事件是在官方的api中找到的,话说api功能还是蛮强大!  代码如下 复制代码 <script type="text/javascript">   /**使用UEeditor,详情参考http://ueditor.baidu.com/doc/  **/   var config = {    initialFrameHeight:80,    initialFrameWidth:810,    toolbars:[["

AngularJS 利用指令集成ZTree

前段时间一直在看AngularJS的资料,感觉是个很好的框架,很想有机会尝试用它做点什么. jQuery ZTree是国内非常不错的JQuery插件,功能齐全,文档和API也非常的友好,之前项目上常用此插件.  AngularJS 功能虽然非常强大,但UI上提供的插件不像JQuery那么多,而且只能通过directive定义扩展的UI插件,虽然国外已经提供了一些基于 directive的Tree功能实现,但毕竟不像ZTree那样强大,而且Tree是做项目中很长用的一个基本功能. 因此,花了一点时

yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法_php实例

我们接下来就来聊聊Yii2框架是如何整合百度编辑器umeditor的. umeditor是啥,我只听过ueditor,你这umeditor是不是盗版的东东喃?umeditor呢,说白了就是mini版的ueditor,按照百度官方说法,其实就是编辑器中的"短软小",但是功能俱全.咳咳,咱们回归正题. 首先勒,咱们先去官网下载一份mini版的ueditor umeditor,注意哦,是um editor. 下载下来解压放到项目根目录下面的 /css目录下 命名为umeditor,具体位置各

百度编辑器ueditor的初始化调用设置

用百度编辑器一段时间了,感觉非常不错.对比著名的ckeditor来说,我觉得百度编辑器更好用.百度编辑器界面清新,功能定制方便,排版也很好,并且能支持图片上传,附件上传,还可以高亮显示编程语言代码,总之感觉还是挺不错的. 而它的使用也很简单. 下载最新的[1.2.6.1 PHP 版本],解压到你站点合适的目录. 调用方法:  代码如下 复制代码 <html> <head> <meta http-equiv="Content-Type" content=&q

Yii添加百度编辑器 ueditor 扩展例子

这是别人写的一个yii1的百度编辑器ueditor的扩展,站长我已经用在了自己的项目中,现在记录下用法和使用中出现的问题. 目录结构 baiduUeditor |--resource //ueditor资源包 |--views //widget的视图 |--config.php //后端配置文件 包括文件格式 大小 目录 路径 文件名等等 |--UeditorController.php //后端主控制器 可以修改继承类为自定义的基类 |--UeditorWidget.php //widget主

ASP.NET中集成百度编辑器UEditor

  本文给大家讲解的是如何在ASP.NET中集成百度编辑器UEditor的方法和具体的步奏,十分的详细,有需要的小伙伴可以参考下. 0.ueditor简介 UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点.开源基于BSD协议,所有源代码在协议允许范围内可自由修改和使用. UEditor官网:http://ueditor.baidu.com/website/index.html UEditor官方文档地址: http://fex.bai