Angular 動態表單 根據選擇聯動顯示

2022-09-09 15:18:35 字數 1921 閱讀 4298

記錄一下剛剛完成的乙個功能

需求是根據固定的層級結構做動態聯動,在網上找了很多動態表單的相關教程,大部分都是在最開始載入就生成表單.而我的需求是需要在選擇了父級之後再展示父級下的選項

參考了大佬的修仙之路 和 動態生成表單 感謝~

準備階段

配置好已知的層級結構

const itemconfig = [,,,

}]},]

},]

},];

頁面上建立初始層級

在初始表單選項上繫結change事件

頁面配置表單的初始選項

itemform: formgroup;

// 根據父級的選擇 展示的item列表

itempushdom = ;

ngoninit(): void

createfrom(): any );

return group;

}

實現動態插入

通過之前的操作 現在我們的頁面上已經能看到初始的選項了

接下來就是實現動態插入 , 其實簡單來說就是分為兩個步驟: dom插入可選項 和 formgroup新增項

再加上change父級之後清除之前的選擇

dom插入可選項

需要配合之前初始選項繫結的change事件 傳遞children的資訊

html 上也需要配置好相關的可能出現的型別 通過ngswtech 展示 (本例型別較少,只有select和input 如果型別較多可以參考官方文件的動態表單 通過component控制出現的型別)

formgroup新增項

通過 addcontrol()/removecontrol() 對formgroup 表單項 進行新增和刪除(也可以新增驗證)

下面直接上**

component.html (放在上一段form裡)

}:

(selectionchange)="changeselect($event.value,newitem.name)" required>}

component.ts

changeselect(item: any, itemname: string): void 

createitemdom(item: any, itemname: string): void );

});this.addfromdom(item.key, itemname, item.item_type, '', options, item.type);

} else if (item.type === 'item') );

});this.addfromdom(item.key, itemname, item.item_type, item.value, options, item.type);

} else

}}

// add/remove itempushdom

// 儲存item的name/type/parent 在二維陣列中儲存子父級關聯

addfromdom(name: string, key: string, type: string, value: string, options: any, item_type: string): void );

} checkitemdom(itemname: string): any

}} addfromcontrol(name: string): void

delfromcontrol(name: string): void

最後只需要 通過 this.itemform.value 就可以獲得所選的值

或者儲存itempushdom

Angular動態表單生成(四)

我們接著上篇,先把小目標中的所有欄位都定義出來 這部分就是苦力活兒了,把kendouicomponent中的formmodel完善即可 1 formmodel dynamicformcontrolmodel 2new dynamicinputmodel 7new dynamicradiogroupm...

Angular表單驗證

對前端開發人員來說,表單是非常重要的,它負責使用者與程式的互動。它承載著一部分資料校驗的功能,以此減少服務端的壓力。本文就angular表單驗證的兩種方式進行闡述,如有問題,歡迎指正。文章目錄 模板驅動驗證 響應式表單的驗證 自定義驗證器 為了向模板驅動表單中新增驗證,需要新增一些驗證屬性,這裡就使...

Angular 表單簡介

angular 中有兩種表單 元件類指令 formsmodule 元件類指令 reactiveformsmodule validity visited html form template driven formreactive form接下來我們主要來介紹一下 reactive form 的一些相...