时间:2016-02-12 13:24 来源: 我爱IT技术网 作者:佚名
欢迎您访问我爱IT技术网,今天小编为你分享的javascript教程:【Angular实现form自动布局】,下面是详细的讲解!
Angular实现form自动布局
'use strict';
angular.module('form.layout', [])
.provider('formLayout', function(){
// 定义布局构造函数
function FormLayoutFn(){
this.elementTemplate={
text : '\<div class="form-group">\
<label></label>\
<input type="text" class="form-control" />\
</div>',
password : '<div class="form-group">\
<label></label>\
<input type="password" class="form-control" />\
</div>',
radio : '\<div class="form-group">\
<label></label>\
<div id="radiolist"></div>\
</div>',
email : '\<div class="form-group">\
<label></label>\
<input type="email" class="form-control" />\
</div>',
tel : '\<div class="form-group">\
<label></label>\
<input type="tel" class="form-control" />\
</div>',
url : '\<div class="form-group">\
<label></label>\
<input type="url" class="form-control" />\
</div>',
number : '\<div class="form-group">\
<label></label>\
<input type="number" class="form-control" />\
</div>',
checkbox : '<div class="form-group">\
<label></label>\
<div id="checkboxlist"></div>\
</div>',
range : '<div class="form-group">\
<label></label>\
<input type="range"/>\
</div>',
time : '<div class="form-group">\
<label></label>\
<input type="time" class="form-control"/>\
</div>',
date : '<div class="form-group">\
<label></label>\
<input type="date" class="form-control"/>\
</div>',
datetime : '<div class="form-group">\
<label></label>\
<input type="datetime" class="form-control"/>\
</div>',
search : '<div class="form-group">\
<label></label>\
<input type="search" class="form-control"/>\
</div>',
select : '<div class="form-group">\
<label></label>\
<select class="form-control"></select>\
</div>',
textarea : '<div class="form-group">\
<label></label>\
<textarea class="form-control"></textarea>\
<div>',
};
//默认的模板, 可以使用如下的方式使用默认的模板
this.defaultTemplate='<input>';
this.radioTmpl='<label class="radio-inline"><input type="radio">radiotitle</label>';
this.checkboxTmpl='<label class="checkbox-inline"><input type="checkbox">checkboxtitle</label>';
}
FormLayoutFn.prototype={
getElementTemplate : function () {
return this.elementTemplate;
},
setElementTemplate : function(configTemplate){
this.elementTemplate=angular.extend(this.elementTemplate, configTemplate);
},
layout : function(eleObj, elementObj){
var thiz=this;
var elementTemplate=this.elementTemplate;
var defaultTemplate=this.defaultTemplate;
var radioTmpl=this.radioTmpl;
var checkboxTmpl=this.checkboxTmpl;
if (angular.isObject(eleObj) && angular.isObject(elementObj)) {
angular.forEach(elementObj, function(elementObjIterm, elementObjKey){
//console.log(elementObjIterm.attr.type);
var type=$.trim(elementObjIterm.attr.type);
var templateObj=angular.element(elementTemplate[type]);
// console.log(templateObj.find('input'));
switch(type){
case 'textarea' :
var fileld=templateObj.find('textarea');
// var templateObj=angular.element(elementTemplate.textarea);
break;
case 'select' :
var fileld=templateObj.find('select');
// var templateObj=angular.element(elementTemplate.select);
break;
case 'button' :
var fileld=templateObj.find('button');
// var templateObj=angular.element(elementTemplate.button);
break;
case 'datepicker' :
var fileld=templateObj.find('datepicker');
// var templateObj=angular.element(elementTemplate.datepicker);
break;
case 'radio' :
var fileld=templateObj.find('#radiolist');
// var templateObj=angular.element(elementTemplate.datepicker);
break;
case 'checkbox' :
var fileld=templateObj.find('#checkboxlist');
// var templateObj=angular.element(elementTemplate.datepicker);
break;
default :
var fileld=templateObj.find('input') ;
break;
}
// 设置 label 的标签名字
templateObj.find('label').html(elementObjIterm.labeltext);
if ('select'==type) {
var options=elementObjIterm.attr.option;
angular.forEach(options, function(content, val){
var option=angular.element('<option value="'+val+'">'+content+'</option>');
fileld.append(option);
});
}else if('radio'==type){
var options=elementObjIterm.attr.option;
angular.forEach(options, function(content, val){
var tmpl=radioTmpl.replace('radiotitle', content);
var tmplObj=angular.element(tmpl);
tmplObj.find('input').attr('value', val);
fileld.append(tmplObj);
});
// console.log(templateObj.find('label'));
}else if('checkbox'==type){
var options=elementObjIterm.attr.option;
angular.forEach(options, function(content, val){
var tmpl=checkboxTmpl.replace('checkboxtitle', content);
var tmplObj=angular.element(tmpl);
tmplObj.find('input').attr('value', val);
fileld.append(tmplObj);
});
}else{
angular.forEach(elementObjIterm.attr, function(val, attrname){
fileld.attr(attrname, val);
})
}
eleObj.append(templateObj.append(fileld));
});
return eleObj;
}else{
throw '传入的参数不是对象';
}
}
};
// 实例布局化构造类
var formLayout=new FormLayoutFn();
this.$get=function () {
return formLayout;
};
//配置布局元素的模板
this.setElementTemplate=function (configTemplate) {
if (!configTemplate) return ;
formLayout.setElementTemplate(configTemplate);
}
});
angular.module('form.layout')
.directive('formLayout', ['$http', '$filter', 'formLayout',function($http, $filter, formLayout){
return {
restrict : 'AE',
scope : {
url : "=",
// fields : {}
},
replace : true,
// templateUrl : './tmpl/formlayout.html',
transclude : true,
// require : '?^formLayout',
link : function(scope, elem, attrs){
if(!scope.url){
throw '请在指令参数url中传入获取数据的 url 的值';
}
$http.get(scope.url).success(function(successData, status, headers, config){
if (!successData.code) {
scope.fields=successData.data;
processFormFilds(successData.data);
}else{
throw '获取表单数据失败';
}
})
function processFormFilds(data){
formLayout.layout(elem, data);
// console.log(data);
}
}
}
}]);
关于Angular实现form自动布局的用户互动如下:
相关问题:求问,angular下如何提交表单?
答: >>详细
相关问题:HTTP请求中的form data和request payload的区别
答:1、HTTP请求过程中,get请求:表单参数以name=value&name1=value1的形式附到url的后面; 2、post请求:表单参数是在请求体中,也是name=value&name1=value1的形式在请求体中。 POST表单请求提交时,使用的Content-Type是application/x-www-form-... >>详细
相关问题:Auto CAD 主要的布局设置参数以及各参数的功能?
答:布局设置参数?你能否说的更明白一些吗 以便于解答 >>详细
- 【firefox】firefox浏览器不支持innerText的解决
- 【Extjs】Extjs学习过程中新手容易碰到的低级错误
- 【clearInterval】js clearInterval()方法的定义
- 【ComboBox】ComboBox 和 DateField 在IE下消失的
- 【dom】javascript dom追加内容实现示例-追加内容
- 【checkbox】让checkbox不选中即将选中的checkbox
- 【Array】js中更短的 Array 类型转换-类型转换
- 【append】append和appendTo的区别以及appendChil
- 【ExtJs】ExtJs 表单提交登陆实现代码-表单提交-
- 【ajax清除浏览器缓存】Ajax清除浏览器js、css、
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
