appFormly.config( function config(formlyConfigProvider) { // formlyConfigProvider.setType({ // name: 'custom', // templateUrl: 'custom.html' // }); // formlyConfigProvider.setWrapper({ // name: 'bootstrapLabel', // templateUrl: 'assets/views/customform/tpl/normal-label.html' // }); // formlyConfigProvider.setType({ // name: 'ui-panel', // templateUrl: 'assets/views/customform/tpl/ui-panel.html' // }); formlyConfigProvider.setType({ name: 'ui-input', extends: 'input', templateUrl: 'assets/views/customform/tpl/ui-input.html', defaultOptions: function(options) { return { templateOptions: { transform: function(value) {} } }; }, controller: ['$scope', function($scope) { console.log($scope); }] }); } ); app.controller('CustomformCtrl', ["$rootScope", "$scope", "$injector", "$parse", function($rootScope, $scope, $injector, $parse) { console.log('CustomformCtrl is load'); //vm 配置数据 var vm = this; $scope.vm = vm; vm.options = {}; vm.exampleTitle = ['expressionProperties', 'model property']; // vm.fields = []; vm.fields = [{ key: 'password', type: 'ui-input', className: 'col-xs-4', templateOptions: { type: 'password', label: 'Password', placeholder: 'Password', required: true }, expressionProperties: { 'templateOptions.disabled': '!model.username' } }]; vm.model = {}; // 内部定义变量 var that = $injector; var parse = $parse; var formKey = ""; var pdKey = ""; var modelWatch = ""; //angular-formly代码渲染 function decodeVMForm(vmForm) { var result = { model: {}, fields: [] }; //设置模型实体数据 begin // var mdata = vmForm.model; //解析数据实体 var mdata = angular.fromJson(vmForm.model); //JSON.parse(field.extjson); angular.extend(result.model, mdata); if (modelWatch != null && modelWatch != '') { //angular.extend(result.model.incident,modelWatch.incident); //result.model.alarmType = modelWatch.alarmType; // vmForm.cancelUrl = modelWatch.cancelUrl; // console.log(modelWatch.cancelUrl) for (var index in modelWatch.model) { //console.log(JSON.stringify(index+" " +JSON.stringify( modelWatch.model[index]))); if (result.model[index] != null) { angular.extend(result.model[index], modelWatch.model[index]); } else { result.model[index] = modelWatch.model[index]; } } } //设置模型实体数据 end //解析设计数据生成表单项 begin var fields = []; //处理修改设计数据中展示设置 angular.forEach(vmForm.fields, function(field) { if (field.key == "") { delete field.key; } if (angular.isDefined(field.extjson)) { var extObj = angular.fromJson(field.extjson); //JSON.parse(field.extjson); angular.extend(field.templateOptions, extObj.templateOptions); delete extObj.templateOptions; for (var prop in extObj) { if (new RegExp("Expression").test(prop)) { //var obj = $scope.$eval(extObj[prop]); //extObj[prop] = $scope.$eval(extObj[prop]); if (extObj[prop] != null) { if (new RegExp("function").test(extObj[prop])) { var propValue = eval(extObj[prop]); extObj[prop] = propValue; } else { //console.log(extObj[prop]); var obj = $scope.$eval(extObj[prop]); extObj[prop] = obj; //console.log(obj); } } } else if (new RegExp("expressionProperties").test(prop)) { for (var p in extObj[prop]) { if (new RegExp("function").test(extObj[prop][p])) { var propValue = eval(extObj[prop][p]); extObj[prop][p] = propValue; } else { //if(p.indexOf("'")>=0){ // var obj = $scope.$eval(extObj[prop][p]); // extObj[prop][$scope.$eval(p)]=obj; //} } } } else if ("watcher" == prop) { if (angular.isArray(extObj[prop])) { angular.forEach(extObj[prop], function(item, index) { for (var p in item) { if (new RegExp("function").test(item[p])) { var propValue = eval(item[p]); extObj[prop][index][p] = propValue; } } }); } else if (angular.isObject(extObj[prop])) { for (var p in extObj[prop]) { if (new RegExp("function").test(extObj[prop][p])) { var propValue = eval(extObj[prop][p]); extObj[prop][p] = propValue; } } } } } angular.extend(field, extObj); delete field.extjson; } if (angular.isDefined(field.templateOptions)) { var templateOs = field.templateOptions; for (var property in templateOs) { //console.log(angular.isString(templateOs[property]) +" "+property + " " + (!(new RegExp("[\u4e00-\u9fa5]").test(templateOs[property])))); if (angular.isString(templateOs[property])) { //&& !(new RegExp("[\u4e00-\u9fa5]").test(templateOs[property])) if (new RegExp("function").test(templateOs[property])) { var propValue = eval(templateOs[property]); field.templateOptions[property] = propValue; } else { if (that.has(templateOs[property])) { field.templateOptions[property] = that.get(templateOs[property]); } else { field.templateOptions[property] = templateOs[property]; } } } else if (templateOs[property] == null) { //delete field.templateOptions[property]; } else {} } } // if (angular.isDefined($stateParams.formKey) && $stateParams.formKey != "") { // api_configure_form.renderForm($stateParams.formKey, '00000').then(function(responseData) { // if (responseData) { // //console.log("responseData>>>");console.log(responseData); // var vmForm = Restangular.stripRestangular(responseData); // if (vmForm) { // //console.log("vmForm>>>");console.log(vmForm); // var modelData = {}; // //modelData=myData.data; // decodeVMForm(vmForm); // } // } // }); // } // console.log(field); if (angular.isDefined(field.templateOptions) && angular.isDefined(field.templateOptions.extjson)) { var extObj = angular.fromJson(field.templateOptions.extjson); //JSON.parse(field.extjson); angular.extend(field.templateOptions, extObj); delete field.templateOptions.extjson; } // ... if (field.templateOptions) { //处理远程获取数据控件方法调用 if (field.templateOptions.optionsUrl) { field.templateOptions.refresh = refreshSelectOptions; } //事件脚本处理 // if(field.templateOptions.ngChangeScript){ // if(!field.expressionProperties)field.expressionProperties={}; // field.expressionProperties.ngChange = function(modelVal,viewVal,ev){ //// console.log(ev); //// console.log("change>>"+ev.options.key); // eval(field.templateOptions.ngChangeScript); // } // } // if(field.templateOptions.ngClickScript){ // if(!field.expressionProperties)field.expressionProperties={}; // field.expressionProperties.ngClick = function(modelVal,viewVal,ev){ //// console.log(ev); //// console.log("click>>"+ev.options.key); // eval(field.templateOptions.ngClickScript); // } // } //处理嵌套属性数据绑定/ if (field.templateOptions.pkey) { var pmodel, i = 0; angular.forEach(field.templateOptions.pkey.split("."), function(p) { if (i == 0) { if (result.model[p] == null) { result.model[p] = {}; } pmodel = result.model[p]; i++; } else { if (pmodel[p] == null) { pmodel[p] = {}; } pmodel = pmodel[p]; } }); if (pmodel != null) { field.model = pmodel; if (pmodel[field.key] == null) { pmodel[field.key] = null; } } } else { if (result.model[field.key] == null) { result.model[field.key] = null; } } } // console.log(field); result.fields.push(field); }); angular.extend($scope.vm.fields, result.fields); angular.extend($scope.vm.model, result.model); // angular.extend(vm.fields, result.fields); // angular.extend(vm.model, result.model); // angular.extend($scope.vm, vm); // console.log("$scope.vm.model="+JSON.stringify($scope.vm.model)); vm.model["loginUser"] = $rootScope.user; if (modelWatch != null && modelWatch != '' && modelWatch.cancelUrl != null && modelWatch.cancelUrl != '') { vmForm.cancelUrl = modelWatch.cancelUrl; } $scope.formData = vmForm; // console.log("$scope.formData="+JSON.stringify($scope.formData.url)); if ($scope.formData.url == "start") { $scope.Reset = true; $scope.close = false; } else if ($scope.formData.url == "complete") { $scope.Reset = false; $scope.close = true; } //解析设计数据生成表单项 end return result; } function onSubmit() { alert(JSON.stringify(vm.model), null, 2); }; }])