国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

angular學(xué)習(xí)之動態(tài)創(chuàng)建表單的方法

2024-05-06 15:27:26
字體:
供稿:網(wǎng)友

準(zhǔn)備工作

使用ng new async-form創(chuàng)建一個新工程,在app.module.ts中引入ReactiveFormsModule模塊并在根模塊中導(dǎo)入

import { ReactiveFormsModule } from '@angular/forms';@NgModule({ imports: [  ReactiveFormsModule ]})

構(gòu)建表單元素的基類

export class QuestionBase<T> {  value: T;//表單元素的值  key: string;//表單元素鍵的名稱  label: string;//輸入元素的標(biāo)題  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 || '';  }}

繼承表單元素的基類

選擇框元素的數(shù)據(jù)類型繼承基類,設(shè)置了controlType 為'dropdown'并新增了屬性options數(shù)組

import { QuestionBase } from './question-base';export class QuestionDropdown extends QuestionBase<string>{  controlType = "dropdown";  options: { key: string, value: string }[] = [];  constructor(options: {} = {}) {    super(options);    this.options = options["options"] || [];  }}

文本輸入框元素的數(shù)據(jù)類型繼承了基類,設(shè)置了controlType 為'textbox',新增了type屬性,定義input的類型

import { QuestionBase } from './question-base';export class QuestionTextbox extends QuestionBase<string> {  controlType = "textbox";  type:string;  constructor(options:{} ={}){    super(options);    this.type = options["type"]||""  }}

生成數(shù)據(jù)

根據(jù)表單元素的派生類生成表單的數(shù)據(jù)。可以引入一個服務(wù)類,提供表單數(shù)據(jù)。

 getQuestions(){  let questions:QuestionBase<any>[]=[   new QuestionDropdown({    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 QuestionTextbox({    key:'firstName',    label:'First name',    value:"Bombasto",    required:true,    order:1   }),   new QuestionTextbox({    key:'emailAddress',    label:"Email",    type:'email',    order:2   })  ];  return questions.sort((a, b) => a.order - b.order); }

將數(shù)據(jù)轉(zhuǎn)成FormControl類型

可以專門提供一個服務(wù)類,將表單的數(shù)據(jù)轉(zhuǎn)成FormControl類型

 toFormGroup(questions: QuestionBase<any>[]) {  let group: any = {};  questions.forEach(question => {   group[question.key] = question.required?new FormControl(question.value||"",Validators.required)   :new FormControl(question.value||"");  });  return new FormGroup(group); }            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 海口市| 迁西县| 甘洛县| 景洪市| 横峰县| 蛟河市| 鄂尔多斯市| 武宁县| 康乐县| 西平县| 宁乡县| 芷江| 奈曼旗| 水富县| 双辽市| 驻马店市| 海丰县| 枣阳市| 苍梧县| 黑山县| 南溪县| 海淀区| 普安县| 淄博市| 特克斯县| 阳城县| 若羌县| 德格县| 固安县| 龙口市| 沛县| 昔阳县| 平定县| 墨竹工卡县| 新巴尔虎左旗| 怀来县| 山西省| 宁波市| 珲春市| 塔城市| 吉林省|