Angularjs编写KindEditor,UEidtor,jQuery指令


Posted in Javascript onJanuary 28, 2015

目前angularJS非常火热,本人也在项目中逐渐使用该技术,在angularJS中,指令可以说是当中非常重要的一部分,这里分享一些自己编写的指令:

注:本人项目中用了oclazyload进行部分JS文件加载

1、KindEditor

angular.module('AdminApp').directive('uiKindeditor', ['uiLoad', function (uiLoad) {

    return {

        restrict: 'EA',

        require: '?ngModel',

        link: function (scope, element, attrs, ctrl) {

            uiLoad.load('../Areas/AdminManage/Content/Vendor/jquery/kindeditor/kindeditor-all.js').then(function () {

                var _initContent, editor;

                var fexUE = {

                    initEditor: function () {

                        editor = KindEditor.create(element[0], {

                            width: '100%',

                            height: '400px',

                            resizeType: 1,

                            uploadJson: '/Upload/Upload_Ajax.ashx',

                            formatUploadUrl: false,

                            allowFileManager: true,

                            afterChange: function () {

                                ctrl.$setViewValue(this.html());

                            }

                        });

                    },

                    setContent: function (content) {

                        if (editor) {

                            editor.html(content);

                        }

                    }

                }

                if (!ctrl) {

                    return;

                }

                _initContent = ctrl.$viewValue;

                ctrl.$render = function () {

                    _initContent = ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue;

                    fexUE.setContent(_initContent);

                };

                fexUE.initEditor();

            });

        }

    }

}]);

 

2、UEditor:

angular.module("AdminApp").directive('uiUeditor', ["uiLoad", "$compile", function (uiLoad, $compile) {

    return {

        restrict: 'EA',

        require: '?ngModel',

        link: function (scope, element, attrs, ctrl) {

            uiLoad.load(['../Areas/AdminManage/Content/Vendor/jquery/ueditor/ueditor.config.js',

                   '../Areas/AdminManage/Content/Vendor/jquery/ueditor/ueditor.all.js']).then(function () {

                       var _self = this,

                            _initContent,

                            editor,

                            editorReady = false

                       var fexUE = {

                           initEditor: function () {

                               var _self = this;

                               if (typeof UE != 'undefined') {

                                   editor = new UE.ui.Editor({

                                       initialContent: _initContent,

                                       autoHeightEnabled: false,

                                       autoFloatEnabled: false

                                   });

                                   editor.render(element[0]);

                                   editor.ready(function () {

                                       editorReady = true;

                                       _self.setContent(_initContent);

                                       editor.addListener('contentChange', function () {

                                           scope.$apply(function () {

                                               ctrl.$setViewValue(editor.getContent());

                                           });

                                       });

                                   });

                               }

                           },

                           setContent: function (content) {

                               if (editor && editorReady) {

                                   editor.setContent(content);

                               }

                           }

                       };

                       if (!ctrl) {

                           return;

                       }

                       _initContent = ctrl.$viewValue;

                       ctrl.$render = function () {

                           _initContent = ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue;

                           fexUE.setContent(_initContent);

                       };

                       fexUE.initEditor();

                   });

        }

    };

}]);

 

3、jquery.Datatable:

angular.module('AdminApp').directive('uiDatatable', ['uiLoad', '$compile', function (uiLoad, $compile) {

    return function ($scope, $element, attrs) {

        $scope.getChooseData = function () {

            var listID = "";

            var chooseData = $element.find("input[name = IsChoose]:checkbox:checked");

            if (chooseData.length > 0) {

                for (var i = 0; i < chooseData.length; i++) {

                    listID += chooseData[i].value + ",";

                }

            }

            return listID.substring(0, listID.length - 1);

        }

        $scope.refreshTable = function () {

            $scope.dataTable.fnClearTable(0); //清空数据

            $scope.dataTable.fnDraw(); //重新加载数据

        }

        uiLoad.load(['../Areas/AdminManage/Content/Vendor/jquery/datatables/jquery.dataTables.min.js',

                '../Areas/AdminManage/Content/Vendor/jquery/datatables/dataTables.bootstrap.js',

                '../Areas/AdminManage/Content/Vendor/jquery/datatables/dataTables.bootstrap.css']).then(function () {

                    var options = {};

                    if ($scope.dtOptions) {

                        angular.extend(options, $scope.dtOptions);

                    }

                    options["processing"] = false;

                    options["info"] = false;

                    options["serverSide"] = true;

                    options["language"] = {

                        "processing": '正在加载...',

                        "lengthMenu": "每页显示 _MENU_ 条记录数",

                        "zeroRecords": '<div style="text-align:center;font-size:12px">没有找到相关数据</div>',

                        "info": "当前显示第 _PAGE_ 页 共 _PAGES_ 页",

                        "infoEmpty": "空",

                        "infoFiltered": "搜索到 _MAX_ 条记录",

                        "search": "搜索",

                        "paginate": {

                            "first": "首页",

                            "previous": "上一页",

                            "next": "下一页",

                            "last": "末页"

                        }

                    }

                    options["fnRowCallback"] = function (nRow, aData, iDisplayIndex, iDisplayIndexFull) {

                        $compile(nRow)($scope);

                    }

                    $scope.dataTable = $element.dataTable(options);

                });

        $element.find("thead th").each(function () {

            $(this).on("click", "input:checkbox", function () {

                var that = this;

                $(this).closest('table').find('tr > td:first-child input:checkbox').each(function () {

                    this.checked = that.checked;

                    $(this).closest('tr').toggleClass('selected');

                });

            });

        })

    }

}]);

以上3则就是本人编写的AngularJS指令,这里抛砖引玉下,希望对小伙伴们能有所帮助,

Javascript 相关文章推荐
javascript 常用方法总结
Jun 03 Javascript
5款JavaScript代码压缩工具推荐
Jul 07 Javascript
简单谈谈jQuery(function(){})与(function(){})(jQuery)
Dec 19 Javascript
js实现同一页面多个不同运动效果的方法
Apr 10 Javascript
TypeScript 学习笔记之基本类型
Jun 19 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
Jan 21 Javascript
jQuery基于扩展实现的倒计时效果
May 14 Javascript
Highcharts入门之基本属性
Aug 02 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
Sep 04 Javascript
BootStrapTable服务器分页实例解析
Dec 20 Javascript
JavaScript简单实现合并两个Json对象的方法示例
Oct 16 Javascript
JavaScript原型式继承实现方法
Nov 06 Javascript
调试JavaScript中正则表达式中遇到的问题
Jan 27 #Javascript
JavaScript插件化开发教程 (四)
Jan 27 #Javascript
JavaScript插件化开发教程 (三)
Jan 27 #Javascript
js实现简单随机抽奖的方法
Jan 27 #Javascript
JavaScript插件化开发教程 (二)
Jan 27 #Javascript
javascript将数字转换整数金额大写的方法
Jan 27 #Javascript
JS实现同时搜索百度和必应的方法
Jan 27 #Javascript
You might like
全国FM电台频率大全 - 18 湖南省
2020/03/11 无线电
php中将一段数据存到一个txt文件中并显示其内容
2014/08/15 PHP
thinkphp验证码的实现(form、ajax实现验证)
2016/07/28 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
2019/07/20 PHP
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
javascript客户端解决方案 缓存提供程序
2010/07/14 Javascript
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
分享一则javascript 调试技巧
2015/01/02 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
AngularJS 让人爱不释手的八种功能
2016/03/23 Javascript
jQuery深拷贝Json对象简单示例
2016/07/06 Javascript
浅谈jQuery中的checkbox问题
2016/08/10 Javascript
原生js实现倒计时功能(多种格式调用)
2017/01/12 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
React中的render何时执行过程
2018/04/13 Javascript
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
vue transition 在子组件中失效的解决
2019/11/12 Javascript
jQuery AJAX应用实例总结
2020/05/19 jQuery
跟老齐学Python之不要红头文件(2)
2014/09/28 Python
Windows下安装Django框架的方法简明教程
2018/03/28 Python
Python requests发送post请求的一些疑点
2018/05/20 Python
Win10环境python3.7安装dlib模块趟过的坑
2019/08/01 Python
Django 拆分model和view的实现方法
2019/08/16 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
详解Python3 定义一个跨越多行的字符串的多种方法
2020/09/06 Python
Python非单向递归函数如何返回全部结果
2020/12/18 Python
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
Java如何读取CLOB字段
2013/10/10 面试题
编辑找工作求职信分享
2014/01/03 职场文书
关爱残疾人演讲稿
2014/05/24 职场文书
2014幼儿园小班工作总结
2014/11/10 职场文书
2014年为民办实事工作总结
2014/12/20 职场文书
涨价通知
2015/04/23 职场文书
大学生党课感想
2015/08/11 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript