vue-vben-admin
vue-vben-admin copied to clipboard
关于 From 表单组件的 ApiSelect 和 ApiTreeSelect 动态设置默认值
- 我通过注入 api 获取到了下拉列表 , 但是此时我想动态设置默认值 , 比如下拉列表的第一个为默认值 , 此时如何拿到下拉列表放到 defaultValue . 望解答.谢谢!!
- 也可以通过手动再次调用 api , 但是感觉有点多余
看了下, 发现有个 onOptionsChange 事件, 可以通过这个来更新, 文档怎么没标注
文档在组件使用上有点不全 可以pr增加相应api说明
看了下, 发现有个 onOptionsChange 事件, 可以通过这个来更新, 文档怎么没标注
render方法里面 model[field] = options[0].value,是用这种方式吗?
@gh852195168 @pg54 @wangxiaoer5200 可以使用如下方式设置
FormSchema:
{
label: '使用者',
field: 'usedCode',
component: 'ApiSelect',
dynamicDisabled: ({ values }) => !!values.id,
show: true,
required: true,
componentProps: ({ formActionType, formModel }) => {
return {
api: queryAllCompany,
showArrow: true,
showSearch: true,
labelField: 'name',
valueField: 'code',
getPopupContainer: () => document.body,
onOptionsChange: (options) => {
// 注意,要在 “编辑” 时预先赋值 id,否则会受 API 延时影响,进而导致取不到值!详细代码如下:
if (!formModel.id) {
// 新增时默认取第一个对象的值
formActionType.setFieldsValue({ usedCode: options[0].value });
}
},
};
},
},
预先赋值 id:
//表单赋值
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
//重置表单
await resetFields();
setDrawerProps({ confirmLoading: false });
isUpdate.value = !!data?.isUpdate;
if (unref(isUpdate)) {
// ⚠️ 预先赋值 id
setFieldsValue({ id: data.record?.id });
await queryById(data.record?.id).then(async (resp) => {
setFieldsValue(resp);
});
}
});