Angular模式形式destroyStrategy只适用于同级对象数组.它对其他兄弟姐妹不起作用



我还没有成功地让销毁策略在任何兄弟属性或兄弟对象上工作。它只适用于兄弟数组的对象。请检查这个例子:

$scope.schema = {
    "type": "object",
    "properties": {
        "propertyOne": {
            "type": "string",
            "enum": ["option1", "option2"],
            "title": "Property One Select"
        },
        "propertyTwo": {
            "type": "string",
            "enum": ["option3", "option4"],
            "title": "Property Two Select"
        },
        "objectOne": {
            "type": "object",
            "properties": {
                "objectOnePropertyThree": {
                    "type": "string",
                    "enum": ["option5","option6"],
                    "title": "Property Three Select"
                }
            }
        },
        "arrayOfObjects": {
            "type": "array",
            "items": {
               "type": "object",
                "properties": {
                    "arrayObjectPropertyFour": {
                            "type": "string",
                            "enum": ["option7","option8"],
                            "title": "Property Four Select"
                        }
                }
            }
        }
    },
    "required": ["propertyOne"]
};

$scope.form = [{
    "key": "propertyOne"
}, {
    "key": "propertyTwo",
    "condition": "model.propertyOne === "option1""
},{
    "key": "objectOne.objectOnePropertyThree",
    "condition": "model.propertyOne === "option1""
},{
    "key": "arrayOfObjects",
    "condition": "model.propertyOne === "option1""
},
{
    "type": "submit",
    "title": "Save"
}];

http://jsfiddle.net/mutharasus/dp18a70b/在这里,如果你选择第一个下拉菜单为"Option1",然后选择所有其他下拉菜单并保存。然后返回并将第一个下拉菜单切换到"Option2"并保存,您可以看到只有最后一个对象数组被destroy策略删除。

我做错了什么,还是这是一个bug在角模式形式?我查看了github项目中当前开放的问题,我没有看到关于此的开放问题。

你是对的,当一个单独的字段由于条件从视图中删除时,它目前的行为方式不是你所期望的。

事情是这样的:在ASF的"旧的"捆绑装饰器下,每个字段类型的装饰器都在一个外部标签中呈现在页面上。然后处理和呈现适当字段模板的内容。条件逻辑适用于标签内的所有内容,但不适用于标签本身。通常情况下,这是可以的,但是destroyStrategy逻辑被分配给了标签的$destroy事件。最终的结果是,除非从DOM中删除整个标记,否则$destroy事件永远不会触发。这就是对象数组中的模型值被清理的原因——当"模型"被删除时,容器被删除。propertyOne === 'option1'"条件失败,将$destroy事件级联到数组中的每个对象。

我认为随着新构建器的创建和发布,这一点被忽视了,因为我在该功能的PR最后提出了这个问题(https://github.com/Textalk/angular-schema-form/pull/371)。

好的一面是,新的构建器方法(可以通过从https://github.com/Textalk/angular-schema-form-bootstrap添加bootstrap-decorator文件来使用)没有这个问题。相反,destroyStrategy逻辑通过指令应用于表单字段,因为不再使用标记。除非你在这个时候需要和旧的装饰师呆在一起,否则我建议你找一些新的来试一试。

让我们知道进展如何!

最新更新