目前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指令,这里抛砖引玉下,希望对小伙伴们能有所帮助,