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