landers.angular
Version:
landers.angular
148 lines (138 loc) • 7.47 kB
JavaScript
;angular.module('Landers.angular')
.directive('landersNameValueInputer', ['$timeout', 'Dialog', 'Helpers', function ($timeout, Dialog, Helpers) {
var build_dialog_html = function(label_name, label_data, label_data_rows){
label_name = label_name || '名称';
label_data = label_data || '数据';
label_data_rows = label_data_rows || 2;
return [
'<form class="form-horizontal">',
' <table cellpadding="0" cellspacing="0" border="0" class="stereo form-table">',
' <tr>',
' <td><label class="control-label">' + label_name + '</label></td>',
' <td><div class="control-input">',
' <input ng-model="form.name" type="text" class="form-control" ng-if="!options.names"/>',
' <select ng-model="form.name" class="form-control" ng-if="options.names">',
' <option ng-repeat="item in options.names" value="{{item}}">{{item}}</option>',
' </select>',
' </div></td>',
' </tr>',
' <tr>',
' <td><label class="control-label">' + label_data + '</label></td>',
' <td><div class="control-input"><textarea ng-model="form.value" value="" type="text" class="form-control" rows="' + label_data_rows + '"></textarea></div></td>',
' </tr>',
' </table>',
'</form>'
].join('\n');
}
return {
restrict: 'EA',
scope: {
nviModel: '='
},
template: [
'<div class="relative">',
' <a ng-click="edit($event)" class="btn btn-xs btn-primary absolute right-top"><i class="glyphicon glyphicon-plus"></i></a>',
'</div>',
'<ul class="hlist list">',
' <li ng-repeat="item in nviModel track by $index" class="mr20 list-item">',
' <a ng-click="edit($event, $index)" class=""><span>{{item.name}}</span><span ng-hide="hideListData">:{{item.value}}</span></a>',
' <a ng-click="remove($event, $index)" class="btn btn-warning btn-xs ml5"><i class="glyphicon glyphicon-minus"></i></a>',
' </li>',
'</ul>'
].join('\n'),
link: function ($scope, $element, $attrs) {
var label_name = $attrs['nviLabelName'];
var label_data = $attrs['nviLabelData'];
var label_data_rows = $attrs['nviLabelDataRows'];
$scope.hideListData = $attrs['nviHideListData'] != 'false';
var dialog_width = $attrs['nviDialogWidth'];
if (!isNaN(dialog_width)) dialog_width = parseInt(dialog_width);
var dialog_height = $attrs['<nviD></nviD>ialogHeight'];
if (!isNaN(dialog_height)) dialog_height = parseInt(dialog_height);
angular.extend($scope, {
form: {},
options: Helpers.attrItemToJson($attrs, 'nviOptions'),
edit: function($event, item_index) {
$timeout(function() {
Dialog.show($scope, {
title: $attrs['nviName'],
content: build_dialog_html(label_name, label_data, label_data_rows),
width: dialog_width || 350,
height: dialog_height || 'auto',
lock: true,
fixed: true,
effect: 'vmove1',
onclose: function(){
// 清除编辑数据
$scope.form = {};
// angular_scope_apply($scope);
},
onload: function () {
$scope.nviModel = $scope.nviModel || [];
if (item_index !== undefined) {
$scope.form = angular.copy($scope.nviModel[item_index]);
}
},
yes: function () {
var form_data = angular.copy($scope.form);
var check_json_name_exists = function (json, json_index) {
var index = $scope.nviModel.findIndex(function (item, item_index) {
return item.name == json.name && json_index != item_index;
});
return index > -1;
};
// 检查数据完整性
if (!form_data.name || !form_data.name.length ||
!form_data.value || !form_data.value.length
) {
alert('数据输入不完整');
return false;
}
// 检查数据重复性
if (check_json_name_exists(form_data, item_index)) {
alert('【' + form_data.name + '】已经存在');
return false;
}
$timeout(function(){
if (isNaN(item_index)) {
//添加
$scope.nviModel.push(form_data);
} else {
//编辑
$scope.nviModel[item_index] = form_data;
}
});
// angular_scope_apply($scope);
},
no: true
});
}, 100);
},
remove: function ($event, item_index) {
$timeout(function(){
$scope.nviModel.splice(item_index, 1);
});
}
});
$scope.$watch('nviModel', function (new_value) {
if (new_value===undefined) {
return;
} else {
//转换字符串成数组
$scope.nviModel = angular.fromJson(new_value);
}
});
}
};
}])
.filter('landersParseNameValue', function(){
return function(json, link) {
link = link || '';
var ret = [];
for (var i=0; i<json.length; i++) {
ret.push(json[i].name + ':' + json[i].value);
}
return ret.join(link);
};
})
;