首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular schema form destroyStrategy仅适用于作为对象数组的同级。它在其他兄弟姐妹上不起作用

Angular schema form destroyStrategy仅适用于作为对象数组的同级。它在其他兄弟姐妹上不起作用
EN

Stack Overflow用户
提问于 2015-08-27 23:24:20
回答 1查看 485关注 0票数 1

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

代码语言:javascript
复制
$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"
}];

然后返回并将第一个下拉菜单切换为"Option2“并保存您可以看到,使用销毁策略只删除了最后一个对象数组。

是我做错了什么,还是这是angular-schema-form中的一个bug?我查看了github项目中当前开放的问题,但我没有看到关于这方面的开放问题。

EN

回答 1

Stack Overflow用户

发布于 2015-08-29 11:03:10

您是对的,当单个字段因条件而从视图中删除时,它当前的行为方式与您预期的不同。

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

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

好的一面是,新的构建器方法(您可以通过添加来自https://github.com/Textalk/angular-schema-form-bootstrap的引导装饰器文件来使用)没有这个问题。相反,destroyStrategy逻辑通过指令应用于表单域,因为不再使用标记。除非您现在需要使用旧的装饰器,否则我建议您抓紧新的装饰器,并尝试一下。

让我们知道它的进展!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32253453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档