子表单示例
组件类型 | 唯一标识 |
---|---|
子表单 | tableField_l0q1sf8l |
单行文本 | textField_l0q1sf8m |
下拉单选 | selectField_l0q1sf8n |
获取子表单全部的值
函数示例
this.$("tableField_l0q1sf8l").getValue();
返回值示例
[
{
textField_l0q1sf8m: "1",
selectField_l0q1sf8n: "选项一",
},
{
textField_l0q1sf8m: "2",
selectField_l0q1sf8n: "选项二",
},
{
textField_l0q1sf8m: "3",
selectField_l0q1sf8n: "选项三",
}
]
获取子表单所有的行标识
函数示例
this.$("tableField_l0q1sf8l").getItems();
返回值示例
['tfitem_1', 'tfitem_2', 'tfitem_3']
获取子表单指定行数据
函数示例
// 获取子表单组件
let tableField = this.$('tableField_l0q1sf8l');
// 获取子表单所有行标识
let items = tableField.getItems();
// 传入指定的行标识
let rowData = tableField.getItemValue(items[0]);
返回值示例
{
textField_l0q1sf8m: "1",
selectField_l0q1sf8n: "选项一",
}
获取子表单指定行指定组件数据
函数示例
// 获取子表单组件
let tableField = this.$('tableField_l0q1sf8l');
// 获取子表单所有行标识
let items = tableField.getItems();
// 传入指定的行标识
let rowData = tableField.getItemValue(items[0]);
// 传入指定的组件唯一标识
let fieldValue = rowData["textField_l0q1sf8m"];
返回值示例
"1"
更新子表单指定行数据
函数示例
// 获取子表单组件
let tableField = this.$('tableField_l0q1sf8l');
// 获取子表单所有行标识
let items = tableField.getItems();
// 更新指定行对应字段,需传入指定的行标识,以及更新后的数据Object
tableField.updateItemValue(items[0], {
textField_l0q1sf8m: "4",
selectField_l0q1sf8n: "选项二",
});
子表单类数据联动
函数示例
export function onChange({ value, extra }) {
// 需将此方法绑定到子表单的onChange上
// 子表单数据变更时,除单元格变化引起的数据变更外,公式计算、数据联动或者外部赋值都会触发子表单的 onChange 事件
// 解构相关属性
const { formGroupId, from, changes = {} } = extra || {};
// 必须,避免使用 updateItemValue 更新子表数据后,再次触发 onChange 陷入死循环
if (from === 'setItemValue') { return };
// 获取子表单组件
let tableField = this.$('tableField_l0q1sf8l');
// 判断是否是子表单内某字段变化
/* if (changes.fieldId === 'textField_l0q1sf8m' || (changes.name ? changes.name.split(".")[1] === 'textField_l0q1sf8m' : false)) {
}; */
// 更新子表单指定列数据,可与上述结合使用
/* tableField.updateItemValue(formGroupId, {
'selectField_l0q1sf8n': "选项二", // 更新对应字段
}); */
// 结合使用,实现类数据联动效果,支持数据源写法
if (changes.fieldId === 'textField_l0q1sf8m' || (changes.name ? changes.name.split(".")[1] === 'textField_l0q1sf8m' : false)) {
tableField.updateItemValue(formGroupId, {
'selectField_l0q1sf8n': "选项二", // 更新对应字段
});
};
}
注意事项
1、onChange函数只能绑定在子表单的onChange上。
2、子表单新Api核心为updateItemValue函数,用于修改子表单指定行组件数据,替代了以往的子表单修改组件Api,解决了数据不同步问题(旧Api为异步函数)。
更新子表单指定行下拉单选/下拉复选/单选/复选的选项值
函数示例
// 获取子表单组件
let tableField = this.$('tableField_l0q1sf8l');
// 获取子表单所有行标识
let items = tableField.getItems();
// 新选项值
let selectOptions = [
{ text: "新选项一", value: "新选项一" },
{ text: "新选项二", value: "新选项二" },
{ text: "新选项三", value: "新选项三" }
];
// 子表下拉赋选项值,通常用于didMount和新增一项回调,需传入行标识、字段唯一标识、新候选值
tableField.setComponentProps(items[items.length - 1], 'selectField_l0q1sf8n', { dataSource: selectOptions });
注意事项
1、通常需要先在didMount时先对最新一行(items[items.length - 1])下拉单选/下拉复选/单选/复选进行操作,后续需要在新增一项回调再次操作,若需要通过其他表单获取selectOptions,可使用selectOptions函数。
beforeAddClick函数进阶
函数用途
1、可返回 false 阻止添加,支持 Promise。
2、可用于新增前做一些数据判断,若符合则新增,反之阻断新增。
3、也可结合Promise实现一些数据调用校验,亦或是dialog提醒。
函数使用
export function beforeAddClick() {
// 可返回 false 阻止添加,支持 Promise
return new Promise((resolve, reject) => {
this.utils.dialog({
method: 'confirm', // 'alert', 'confirm', 'show'
title: '是否新增',
content: '是否新增?', // 如需换行可传入 HTML/JSX 来实现
onOk: () => {
// 允许新增
resolve();
},
onCancel: () => {
// 阻断新增
reject();
},
onClose: () => {
// 阻断新增
reject();
}
});
});
}
子表单内类组件set、get方法
函数用途
1、可以像非子表单组件那样使用组件的set、get方法,如setValue()、setBehavior()、getValue()、getBehavior()
2、此方法有一定的局限性,目前未知。
函数示例
// 获取子表单组件
let tableField = this.$('tableField_l0q1sf8l');
tableField.getComponent(formGroupId, 'textField_ktds6lor').setValue("")