Angularjs编写KindEditor,UEidtor,jQuery指令

AngularJS 1.x版本提供了一种称为指令的机制,让开发者可以扩展HTML元素的功能,这个特殊的标记通常用来创建可重用的组件。

本篇攻略将带你从头到尾学习如何编写三种非常流行的富文本编辑器指令:KindEditor,UEditor和jQuery。

准备工作

在开始之前,我们需要做一些准备工作:

  1. 确保你已经安装了AngularJS 1.x版本。
  2. 下载并解压缩所需编辑器插件包,KindEditor、UEditor或jQuery。
  3. 创建一个新的 AngularJS 应用程序。

编写KindEditor指令

1. 在 HTML 页面中添加 KindEditor 插件

使用下面的代码引入 KindEditor 源文件:

<script src="kindeditor.min.js" type="text/javascript" charset="utf-8"></script>
<link rel="stylesheet" href="skins/default.css" type="text/css" media="all">

2. 创建指令

在 AngularJS 应用程序中创建一个指令,如下所示:

app.directive('kindEditor', function() {
  return {
    restrict: 'A',
    require: '?ngModel',
    link: function(scope, element, attrs, ngModel) {
      var editor = KindEditor.create(element[0], {
        resizeType : 1,
        allowPreviewEmoticons : false,
        allowImageUpload : true,
        allowFileManager : true,
        uploadJson : '../php/upload_json.php',
        fileManagerJson : '../php/file_manager_json.php',
        allowFileManager : true,
        afterBlur: function() {
            ngModel.$setViewValue(editor.html());
        }
      });

      ngModel.$render = function() {
        editor.html(ngModel.$viewValue);
      };
    }
  };
});

上述代码中,我们在 app 中创建了一个指令,并将其命名为 "kindEditor"。该指令使用了 restrict 属性来指定该指令是一个属性指令。我们将其指令绑定到一个文本框上。

3. 将指令添加到 HTML 元素

<textarea kind-editor ng-model="content" name="content"></textarea>

在上述代码中,“ng-model”属性指定了我们的 model 值,即对应控制器中的"content"变量。

编写UEditor指令

1. 在 HTML 页面中添加 UEeditir 插件

使用下面的代码引入 UEeditor 源文件:

<script type="text/javascript" src="ueditor.config.js"></script>
<script type="text/javascript" src="ueditor.all.js"></script>
<link rel="stylesheet" type="text/css" href="ueditor.css"/>

2. 创建指令

在 AngularJS 应用程序中创建一个指令,如下所示:

app.directive('ueditor', function() {
  return {
    restrict: 'A',
    require: '?ngModel',
    link: function(scope, element, attrs, controller) {
      var editor = UE.getEditor(element[0].id, {
        toolbars: [[
        'fullscreen', 'source', '|', 'undo', 'redo', '|',
        'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'superscript',
        'subscript', 'removeformat', 'formatmatch', 'autotypeset', 'blockquote',
        'pasteplain', '|', 'forecolor', 'backcolor', 'insertorderedlist',
        'insertunorderedlist', 'selectall', 'cleardoc', '|',
        'rowspacingtop', 'rowspacingbottom', 'lineheight', '|',
        'customstyle', 'paragraph', 'fontfamily', 'fontsize', '|',
        'directionalityltr', 'directionalityrtl', 'indent', '|',
        'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'touppercase', 'tolowercase',
        '|', 'link', 'unlink', 'anchor', '|', 'imagenone', 'imageleft', 'imageright', 'imagecenter', '|',
        'insertimage', 'scrawl', 'insertvideo', 'music', 'attachment', 'map', 'gmap', 'insertframe', 'insertcode', 'webapp', 'pagebreak', 'template', 'background', '|',
        'horizontal', 'date', 'time', 'spechars', 'snapscreen', 'wordimage', '|',
        'print', 'preview', 'searchreplace', 'help'
        ]],
        autoHeightEnabled: false,
        wordCount: false,
        initialFrameHeight: 200
      });

      editor.ready(function() {
        editor.setContent(controller.$viewValue);
        editor.addListener('contentChange', function() {
          scope.$apply(function() {
            controller.$setViewValue(editor.getContent());
          });
        });
      });
    }
  };
});

上述代码中,我们在 app 中创建了一个指令,并将其命名为 "ueditor",该指令使用了 restrict 属性来指定该指令是一个属性指令。

3. 将指令添加到 HTML 元素

<script id="textarea" type="text/plain" ueditor ng-model="content"></script>

在上述代码中,“ng-model”属性指定了我们的 model 值,即对应控制器中的"content"变量。

编写jQuery指令

1. 在 HTML 页面中添加 jQuery 插件

使用下面代码引入 jQuery 插件文件:

<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<script src="http://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link href="http://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<script src="/js/bootstrap-wysiwyg.js"></script>

2. 创建指令

在 AngularJS 应用程序中创建一个指令,如下所示:

app.directive('jqueryWysiwyg', function() {
  return {
    restrict: 'A',
    require: '?ngModel',
    link: function($scope, element, attrs, ngModel) {
      $(document).ready(function() {
        $scope.$apply(function() {
          $scope.editor = element.html();
        });

        element.wysiwyg({ 
          events:{
            keyup: function() {
              $scope.$apply(function() {
                ngModel.$setViewValue(element.html());
              });
            },
            focus: function() {
              angular.element(this).closest('.wysiwyg').addClass('active');
            },
            blur: function() {
              angular.element(this).closest('.wysiwyg').removeClass('active');
            }
          }
        });
      });
    }
  };
});

上述代码中,我们在 app 中创建了一个指令,并将其命名为 "jqueryWysiwyg",该指令使用了 restrict 属性来指定该指令是一个属性指令。

3. 将指令添加到 HTML 元素

<div contentEditable jquery-wysiwyg ng-model="content"></div>

在上述代码中,“contentEditable”属性告诉浏览器该 div 可以被编辑,“ng-model”属性指定了我们的 model 值,即对应控制器中的"content"变量。

至此,我们已经成功地创建了三种富文本编辑器指令,并可以在任意 AngularJS 项目中重复使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Angularjs编写KindEditor,UEidtor,jQuery指令 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • jQWidgets jqxGrid setcellvaluebyid()方法

    以下是关于“jQWidgets jqxGrid setcellvaluebyid()方法”的完整攻略,包含两个示例说明: 方法简介 setcellvaluebyid(row, datafield, value) 方法是 jWidgets jqxGrid 控件的一个方法,用于指定行 ID 和列的数据字段来设置单元格的值。该方法的语法如下: $("#j…

    jquery 2023年5月10日
    00
  • jQWidgets jqxDragDrop onDragEnd属性

    jQWidgets 是一个流行的 JavaScript UI 库,提供了许多可定制的 UI 组件。其中一个组件是 jqxDragDrop,它是一个用于拖放的控件。jqxDragDrop提供多个事件其中之一是 onDragEnd。下面是关于 jqxDragDrop 的 onDragEnd 事件的详攻略: onDragEnd 事件概述 onDragEnd 事件在…

    jquery 2023年5月11日
    00
  • jQuery UI Sortable toArray()方法

    jQuery UI Sortable toArray()方法 jQuery UI Sortable是一个可排序的插件,它允许用户通过拖动元素来重新排列它们的顺序。toArray()方法是其中一个方法,它可以将排序的元素转换为一个数组。在本文中,将详细介绍jQuery UI Sortable toArray()方法的用法和示例。 toArray() toArr…

    jquery 2023年5月11日
    00
  • jQWidgets jqxPopover close()方法

    以下是关于 jQWidgets jqxPopover 组件中 close() 方法的详细攻略。 jQWidgets jqxPopover close() 方法 jQWidgets jqxPopover 组件提供了 close() 方法,方法用于手动关闭弹出框。 语法 $(‘#popover’).jqxPopover(‘close’); 参数 无参数。 示例 …

    jquery 2023年5月12日
    00
  • jQWidgets jqxTouch swipeMax属性

    以下是关于 jQWidgets jqxTouch swipeMax 属性的完整攻略: jQWidgets jqxTouch swipeMax 属性 swipeMax 属性用于设置刷屏事件的最大距离,即用户在屏幕上滑动手指的最大距离,超过该距离则不会被视为刷屏事件。默认值为 75 像素。 语法 $(‘#targetElement’).jqxTouch({ sw…

    jquery 2023年5月11日
    00
  • jqGrid用法汇总(全经典)

    首先来介绍一下jqGrid。 什么是jqGrid? jqGrid是一个开源的jQuery插件,是一个表格插件,便于实现数据的分页、排序、筛选及编辑操作等,可与众多的主流Web开发框架(如Spring、Struts、ASP.NET MVC、Ruby on Rails)集成使用。jqGrid拥有丰富的功能和易于实现的特性,因此在Web开发中被广泛应用。 安装和使…

    jquery 2023年5月27日
    00
  • jQuery插件制作的实例教程

    「jQuery插件制作的实例教程」是一篇教你如何编写 jQuery 插件的文章。下面我会为你详细讲解它的完整攻略。 概述 文章分为五个部分,分别为介绍、实现思路、代码实现、插件使用和结语。其中,最关键的是“实现思路”和“代码实现”两部分,因为它们分别告诉我们如何想到并实现一个 jQuery 插件。 实现思路 首先,我们需要明确一件事情:jQuery 插件实质…

    jquery 2023年5月18日
    00
  • jQWidgets jqxGrid iscolumnvisible()方法

    jQWidgets jqxGrid iscolumnvisible() 方法详解 jQWidgets jqxGrid 是一种表格控件,用于在 Web 应用程序中创建表格。iscolumnvisible() 方法是 jqxGrid 控件的一个方法,用于检查指定列是否可见。本文将详细讲解 iscolumnvisible() 方法的使用方法,并提供两个示例。 方法…

    jquery 2023年5月10日
    00
合作推广
合作推广
分享本页
返回顶部