この記事の例では、Angular のフォーム自動レイアウトの実装の詳細なコードを説明しており、具体的な内容は次のとおりです。
レンダリング:
特定のコード:
1.formlayoutCtrl.js
'use strict'; sxlcApp.controller('formlayoutCtrl', ['$scope', '$filter', '$http', function($scope, $filter, $http){ $scope.title = '表单布局中'; $scope.dataParamsUrl = './php/formlayout.json'; $scope.resetForm = function(num){ console.log(num) } }]);
2. フォームレイアウト.html
<div class="container" ng-controller="formlayoutCtrl"> <span>{{title}}</span> <form class="form-horizontal" style="width: 400px;" name="formlayout" w5c-form-validate="validateOptions" novalidate> <form-layout url="dataParamsUrl"> </form-layout> <button type="submit" class="btn btn-sm btn-info"> 提交 </button> <button type="reset" class="btn btn-sm btn-danger" ng-click="resetForm()"> 重置 </button> </form> </div>
3. フォームレイアウト.html
<div class="container" ng-controller="formlayoutCtrl"> <span>{{title}}</span> <form class="form-horizontal" style="width: 400px;" name="formlayout" w5c-form-validate="validateOptions" novalidate> <form-layout url="dataParamsUrl"> </form-layout> <button type="submit" class="btn btn-sm btn-info"> 提交 </button> <button type="reset" class="btn btn-sm btn-danger" ng-click="resetForm()"> 重置 </button> </form> </div>
4.formlayoutdirective.js
'use strict'; angular.module('form.layout', []) /** * 定义布局的服务 * @method * @param {Object} ) this.defaultTemplate [布局的模板] * @return {[type]} [description] */ .provider('formLayout', function(){ // 定义布局构造函数 function FormLayoutFn(){ /** * 定义表单元素的模板 * @type {{text: string, radio: string, checkbox: string, remember: string, range: string, time: string, date: string, datetime: string, search: string, select: string}} */ 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 = { /** * 获取模板 * @method getElementTemplate * @return {[type]} [description] */ getElementTemplate : function () { return this.elementTemplate; }, /** * 配置布局元素的模板 * @param configTemplate */ setElementTemplate : function(configTemplate){ this.elementTemplate = angular.extend(this.elementTemplate, configTemplate); }, /** * 实现布局函数 * @method layout * @param {[type]} eleObj 指令中的模板对象 * @param {[type]} elementObj 表单布局元素对象 * @return {[type]} [description] */ 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); } }); /** * 指令的实现 * @method * @return {[type]} [description] */ 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 でフォームの自動レイアウトを実装するための詳細なコードです。皆さんの学習に役立つことを願っています。

本篇文章继续Angular的学习,带大家了解一下Angular中的元数据和装饰器,简单了解一下他们的用法,希望对大家有所帮助!

本篇文章带大家深入了解一下angular的状态管理器NgRx,介绍一下NgRx的使用方法,希望对大家有所帮助!

angular中怎么使用monaco-editor?下面本篇文章记录下最近的一次业务中用到的 monaco-editor 在 angular 中的使用,希望对大家有所帮助!

本篇文章给大家分享一个Angular实战,了解一下angualr 结合 ng-zorro 如何快速开发一个后台系统,希望对大家有所帮助!

Angular项目过大,怎么合理拆分它?下面本篇文章给大家介绍一下合理拆分Angular项目的方法,希望对大家有所帮助!

怎么自定义angular-datetime-picker格式?下面本篇文章聊聊自定义格式的方法,希望对大家有所帮助!

本篇文章带大家了解一下Angular中的独立组件,看看怎么在Angular中创建一个独立组件,怎么在独立组件中导入已有的模块,希望对大家有所帮助!

Angular Route中怎么提前获取数据?下面本篇文章给大家介绍一下从 Angular Route 中提前获取数据的方法,希望对大家有所帮助!


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ホットトピック



