form-create
form-create copied to clipboard
`effect`的生命周期`watch`,不会被触发,在规则初始化时,如果自定义属性未设定默认值的情况下
@form-create/ant-design-vue@^2.5.21
UI 框架的版本
1.7.8
问题描述
effect的生命周期watch,规则初始化时,如果自定义属性未设定默认值, 使用setEffect进行更新,不会被触发。
复现步骤/生成规则 (Duplicate steps/generate rules)
/** 以下时自定义属性 **/
// 监听表单值的watch
formCreate.register({
name: "watch",
//属性值发生变化
watch({ value }, rule, fapi) {
!rule.$watches && (rule.$watches = new Set());
typeof value === "function" && rule.$watches.add(value);
},
});
formCreate.register({
name: "watches",
//组件的值发生变化
value({ value }, rule, fapi) {
value && [...value].forEach((x) => x(rule, fapi));
},
});
/** 初始化时使用的规则 **/
const rules = [{
type:"input",
title:"商品名称",
field:"goods_name",
value:"iphone 7",
props: {
type: "text",
},
validate:[
{ required: true, message: '请输入goods_name', trigger: 'blur' },
],
// $watch: undefined,
}];
/** 过程中修改属性值使用 **/
fApi.setEffect("goods_name", "watch", ()=> console.log(123456));
期望的结果 (Desired outcome)
在初始化时,未设定自定义初始化值的情况下,使用
setEffect方法可以触发watch生命周期,并在之后的操作中也可以触发。
建议 (Advice)
建议参考Vue中的$set机制。
没有预定义的自定义属性不是触发相关事件, 这个设计就是如此