下拉列表中有某些预定义的字符串值。输入Sensor's MAC Address
字段有一个模式检查正则表达式。
目标
我希望创建一个对象如下:
{
'MAC_1': 'location2',
'MAC_2': 'location3'
}
其中MAC
由用户输入并location
来自下拉列表。
基于SE 查询,可以使用插入值,patchValue
但在示例中,它仅将值修补到现有键。
如何使用 Angular Forms 实现这一目标?
我已经关注了Medium.com 上关于 Angular-in-Depth的博客来创建响应式表单。
代码片段
export class TestComponent implements OnInit {
dynamicForm: FormGroup;
macPattern = '^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$';
constructor(private formBuilder: FormBuilder) { }
ngOnInit() {
this.dynamicForm = this.formBuilder.group({
filters: this.formBuilder.array([])
});
this.addFilterToFiltersFormArray();
}
createFilterGroup() {
return this.formBuilder.group({
mac: new FormControl('', Validators.pattern(this.macPattern)),
loc: []
});
}
get filtersFormArray() {
return (this.dynamicForm.get('filters') as FormArray);
}
addFilterToFiltersFormArray() {
this.filtersFormArray.push(this.createFilterGroup());
}
removeFilterFromFiltersFormArray(index) {
this.filtersFormArray.removeAt(index);
}
getFilterGroupAtIndex(index) {
return (this.filtersFormArray.at(index) as FormGroup);
}
save() {
console.log(this.dynamicForm.value);
}
}
这为我提供了如下结果:
{
filters: [
{
mac: AA:BB:CC:DD:EE:FF,
loc: location_1
}
]
}
示例数据
[
filters:
{
{
mac: 'AA:BB:CC:11:22:DD',
loc: 'urn:epc:iot:Business.1'
},
{
mac: 'AB:23:24:C3:31:23',
loc: 'urn:epc:iot:Business.3'
}
}
]