博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
@angular/cli项目构建--Dynamic.Form
阅读量:5268 次
发布时间:2019-06-14

本文共 5173 字,大约阅读时间需要 17 分钟。

导入所需模块:

ReactiveFormsModule

DynamicFormComponent.html

{
{formItem.label}} is required

DynamicFormComponent.ts

import {Component, Input, OnInit} from '@angular/core';import {FormItemBase} from './form-item-base';import {FormGroup} from '@angular/forms';@Component({  selector: 'app-dynamic-form',  templateUrl: './dynamic-form.component.html',  styleUrls: ['./dynamic-form.component.css']})export class DynamicFormComponent implements OnInit {  @Input() formItem: FormItemBase
; @Input() form: FormGroup; constructor() { } ngOnInit() { } get isValid() { return this.form.controls[this.formItem.key].valid; }}

FormItemBase.ts

export class FormItemBase
{ value: T; key: string; label: string; required: boolean; order: number; controlType: string; constructor(options: { value?: T, key?: string, label?: string, required?: boolean, order?: number, controlType?: string } = {}) { this.value = options.value; this.key = options.key || ''; this.label = options.label || ''; this.required = !!options.required; this.order = options.order === undefined ? 1 : options.order; this.controlType = options.controlType || ''; }}

FormTextbox.ts

import {FormItemBase} from './form-item-base';export class FormTextbox extends FormItemBase
{ controlType = 'textbox'; type: string; constructor(options: {} = {}) { super(options); this.type = options['type'] || ''; }}

FormDropdown.ts

import {FormItemBase} from './form-item-base';export class FormDropdown extends FormItemBase
{ controlType = 'dropdown'; options: {key: string, value: string}[] = []; constructor(options: {} = {}) { super(options); this.options = options['options'] || []; }}

FormItemControl.ts

import {Injectable} from '@angular/core';import {FormItemBase} from './form-item-base';import {FormControl, FormGroup, Validators} from '@angular/forms';@Injectable()export class FormItemControlService {  constructor() {  }  toFormGroup(formItems: FormItemBase
[]) { const group: any = {}; formItems.forEach(formItem => { group[formItem.key] = formItem.required ? new FormControl(formItem.value || '', Validators.required) : new FormControl(formItem.value || ''); }); return new FormGroup(group); }}

QuestionComponent.html

QuestionComponent.ts

import { Component, OnInit } from '@angular/core';import {QuestionFromService} from './question-form/question-form.service';@Component({  selector: 'app-question',  templateUrl: './question.component.html',  styleUrls: ['./question.component.css']})export class QuestionComponent implements OnInit {  questions: any[];  constructor(questionFormService: QuestionFromService) {    this.questions = questionFormService.getQuestionFormItems();  }  ngOnInit() {  }}

QuestionFormComponent.html

Saved the following values
{
{payLoad}}

QuestionFormComponent.ts

import {Component, Input, OnInit} from '@angular/core';import {FormGroup} from '@angular/forms';import {FormItemBase} from '../../common/component/dynamic-form/form-item-base';import {FormItemControlService} from '../../common/component/dynamic-form/form-item-control.service';@Component({  selector: 'app-question-form',  templateUrl: './question-form.component.html',  styleUrls: ['./question-form.component.css']})export class QuestionFormComponent implements OnInit {  form: FormGroup;  payLoad = '';  @Input()  questions: FormItemBase
[] = []; constructor(private fromItemControlService: FormItemControlService) { } ngOnInit() { this.form = this.fromItemControlService.toFormGroup(this.questions); } onSubmit() { this.payLoad = JSON.stringify(this.form.value); }}

 QuestionForm.service.ts

import {Injectable} from '@angular/core';import {FormItemBase} from '../../common/component/dynamic-form/form-item-base';import {FormDropdown} from '../../common/component/dynamic-form/form-dropdown';import {FormTextbox} from '../../common/component/dynamic-form/form-textbox';@Injectable()export class QuestionFromService {  getQuestionFormItems() {    const questionFormItems: FormItemBase
[] = [ new FormDropdown({ key: 'brave', label: 'Bravery Rating', options: [ {key: 'solid', value: 'Solid'}, {key: 'great', value: 'Great'}, {key: 'good', value: 'Good'}, {key: 'unproven', value: 'Unproven'} ], order: 3 }), new FormTextbox({ key: 'firstName', label: 'First name', value: 'Bombasto', required: true, order: 1 }), new FormTextbox({ key: 'emailAddress', label: 'Email', type: 'email', required: false, order: 2 }) ]; return questionFormItems.sort((a, b) => a.order - b.order); }}

 

转载于:https://www.cnblogs.com/Nyan-Workflow-FC/p/8044694.html

你可能感兴趣的文章
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
ssm框架之将数据库的数据导入导出为excel文件
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
验证组件FluentValidation的使用示例
查看>>
0320-学习进度条
查看>>
解决windows系统的oracle数据库不能启动ora-00119和ora-00130的问题
查看>>
ip相关问题解答
查看>>
MetaWeblog API Test
查看>>
反弹SHELL
查看>>
关闭Chrome浏览器的自动更新和升级提示
查看>>
移动、尺寸改变
查看>>
poj2255Tree Recovery【二叉树重构】
查看>>
tcpcopy 流量复制工具
查看>>
vue和react的区别
查看>>
第十一次作业
查看>>
负载均衡策略
查看>>
微信智能开放平台
查看>>
ArcGIS Engine 中的绘制与编辑
查看>>
Oracle--通配符、Escape转义字符、模糊查询语句
查看>>
c# 文件笔记
查看>>