Angular4 實現動態Form

2021-09-05 12:26:25 字數 1685 閱讀 4530

在最近的專案中遇到動態form表單的問題,遇到很多編輯的地方,而且編輯的form表單很多內容,大概幾十個字段,而且有不同的型別,有文字框,也有下拉列表,有時間控制項,還有數值控制項等等,如果採用硬編碼的方式會有很多問題,**量太大,容易漏資料,很容易出錯;於是正好找到angular有類似的例子,參考這裡,實現動態form元件;

1>定義form的元件基礎類

這裡value是泛型,基本都是string型別吧;key是form中每乙個控制項的名稱,對應提交時資料的屬性值;label是表單字段顯示的label;

required是字段是否是必須填的,order是排序字段,controltype是控制項的型別,比如下拉的,文字框,時間控制項,數值輸入框等;

export class fieldbase = {}

) }

2>根據需求定義不同型別的具體元件

常用的可能是下拉選擇框,文字元件,數值控制項等;需要繼承上面的fileldbase類,比如下拉選擇框

export class dropdownfield extends fieldbase = {}) 

}

指定下拉元件的型別,以及下來選擇的屬性options,這是下拉選擇值的陣列;

下面是文字框輸入控制項,多了個屬性placeholder;

export class textboxfield extends fieldbase = {}) 

}

其他的型別不一一枚舉,大致是類似的;

3.form 元件

這裡form元件中新增了submitbtn來控制提交按鈕的顯示文字,submitform事件和cancelevent事件作為提交和取消處理的事件向外傳播;

@component()

export class dynamicformcomponent implements oninit

ngoninit()

onsubmit()

cancel()

}

初始化的時候,通過fieldcontrolservice 來構造form物件;具體如下所示,這裡針對下拉多選做了另外的處理;通過fields列表構造了formgroup物件;

export class fieldcontrolservice 

toformgroup(fields: fieldbase) ;

fields.foreach(field =>

});return new formgroup(group);

}}

對應的dynamic-form.component.html內容如下所示

這裡引入了迴圈field顯示即可;針對每乙個field做了個封裝,封裝為jhi-dynamic-form-field元件,通過元件型別來顯示不同的元件,具體如下所示

export class dynamicformfieldcomponent
}}}

之後就可以使用dynamic-form元件了;只需要傳入fields陣列即可;然後傳入提交表單和取消表單的事件;整個動態form就可以成功渲染了,其中用到了阿里的antd的form元件庫,需要在module中引入進去;

Angular4 動態啟用禁用select

css disableselectpointer eventscss 屬性指定在什麼情況下 如果有 某個特定的圖形元素可以成為滑鼠事件的 target。tabindex 1 是搞掉鍵盤按tab 能觸發事件的情況 keyword values pointer events auto pointer e...

Angular4的雙向資料繫結

最近在學angular4,因為angularjs中預設是雙向資料繫結,但是如果在比較複雜的頁面使用的話會引起效能問題,那是因為angularjs會在頁面儲存乙個所有資料繫結的列表,每當資料發生變化時,angularjs都會反覆檢視列表,以保證資料一致性。然後在angular4中預設是單向資料繫結。但...

Angular4學習之依賴注入

在乙個專案中,元件和服務之間存在錯綜複雜的關係,為了最小程度的耦合,我們需要來管理組織這種關係,依賴注入就是管理這種關係的一種方式。在學習乙個概念之前,我們必須要知道我們為什麼要學習這個東西,這個東西究竟解決了什麼問題。就好比這裡講到的,依賴注入究竟解決了什麼問題。要解決這個問題,我們先來看看示例 ...