我在成角度的4个项目中使用angular-formly
。
工作的场景是我有用户列表,每个用户都有编辑和删除按钮。
当用户单击“编辑”按钮时,将显示一个模式,其中包含2个字段,一个是电子邮件地址,另一个是更改用户角色的模式。
我正在使用<formly-form>
将表单呈现到模态上。
单击编辑按钮后,将打开此模式,我想在其中显示与单击的编辑按钮关联的电子邮件地址。
此外,我想保留该用户在下拉菜单中选择的角色。
这是formlyfieldconfig
{
key: 'email',
className: 'col-sm-4',
type: 'input',
defaultValue: '',
templateOptions: {
type: 'text',
label: 'Email',
disabled: true,
placeholder: ''
}
},
{
key: 'role',
className: 'col-sm-4',
type: 'select',
defaultValue: '',
templateOptions: {
label: 'Select Role',
options: [],
required: true
}
}
如您所见,以上对于电子邮件字段,我将defaultValue保留为null,而对于角色字段,我将defaultValue和选项保留为null。
当用户单击“编辑”按钮时,我正在动态设置defaultValue和options属性,该属性应反映在模式弹出窗口中。
private edituser(account):void {
this.updateModal.show();
let userData = updateuserdata;
this._PicklistApi.findById('5c45b9e06c0bbc57b5d43a66')
.subscribe(picklist => {
if(picklist && picklist['options'].length) {
_.find(userData,{'key': 'email'})
.defaultValue = account.email;
_.find(userData,{'key': 'role'})
.defaultValue = account.role;
_.find(userData,{'key': 'role'})
.templateOptions.options = [...picklist['options']];
}
});
this.updateuserdata = userData;
}
this._PicklistApi
是一个服务对象,它将为我提供所有可用角色的列表。
updateuserdata
将具有实际的表单字段配置,该配置将传递到HTML中的<formly-form>
组件。
account
参数是具有用户数据(包括电子邮件和角色)的用户对象。
当用户单击编辑按钮edituser()
时,它会被调用,并使用可用角色正确设置选择选项。
但是,它没有同时为电子邮件和角色字段设置defaultValue。
我无法理解此行为,因为正确设置了选择选项,而没有同时为两个字段设置defaultValue。
如果我执行控制台日志,那么我会看到为两个字段都设置了defaultValue,为什么它没有反映在表单中。