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 相关文章推荐
客户端静态页面玩分页
Jun 26 Javascript
JavaScript中的细节分析
Jun 30 Javascript
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
Jul 09 Javascript
12行javascript代码绘制一个八卦图
Apr 02 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
Oct 23 Javascript
JavaScript中的ParseInt(&quot;08&quot;)和“09”返回0的原因分析及解决办法
May 19 Javascript
jQuery层级选择器实例代码
Feb 06 Javascript
深入理解vue-router之keep-alive
Aug 31 Javascript
JQuery 获取多个select标签option的text内容(实例)
Sep 07 jQuery
vue-cli 打包使用history模式的后端配置实例
Sep 20 Javascript
JS栈stack类的实现与使用方法示例
Jan 31 Javascript
vue2.0实现列表数据增加和删除
Jun 17 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
PHP实现移除数组中为空或为某值元素的方法
2017/01/07 PHP
基于jquery的页面划词搜索JS
2010/09/14 Javascript
JS正则验证邮箱的格式详细介绍
2013/11/19 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
BootStrap树状图显示功能
2016/11/24 Javascript
原生js实现键盘控制div移动且解决停顿问题
2016/12/05 Javascript
AngularJS指令中的绑定策略实例分析
2016/12/14 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
JS生成一维码(条形码)功能示例
2017/01/19 Javascript
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
浅谈webpack打包之后的文件过大的解决方法
2018/03/07 Javascript
利用js实现前后台传送Json的示例代码
2018/03/29 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
使用vue完成微信公众号网页小记(推荐)
2019/04/28 Javascript
javascript获取select值的方法完整实例
2019/06/20 Javascript
js实现点赞按钮功能的实例代码
2020/03/06 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
Python高级应用实例对比:高效计算大文件中的最长行的长度
2014/06/08 Python
Python的Bottle框架中获取制定cookie的教程
2015/04/24 Python
基于matplotlib xticks用法详解
2020/04/16 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
2021/01/08 Python
html5文本内容_动力节点Java学院整理
2017/07/11 HTML / CSS
墨西哥网上购物:Linio墨西哥
2016/10/20 全球购物
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
意大利时尚精品店:Nugnes 1920
2020/02/10 全球购物
北京麒麟网信息技术有限公司网络游戏测试面试题
2013/09/28 面试题
通信工程专业个人找工作求职信范文
2013/09/21 职场文书
学生实习自我鉴定
2013/10/11 职场文书
出国留学自荐信
2013/10/25 职场文书
师范生个人推荐信
2013/11/29 职场文书
校园广播稿精选
2014/10/01 职场文书
自主招生专家推荐信
2015/03/26 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
python 命令行传参方法总结
2021/05/25 Python
正确使用MySQL update语句
2021/05/26 MySQL