Angular-Schema-Form 在模式改变时改变表单

3

我需要帮助翻译关于使用Angular Schema Form更改JSON Schema的问题。 如果我按以下代码设置架构:

$scope.schema = {
    "$schema": "http://json-schema.org/draft-04/schema#",
    "title": "Schema number ONE",
    "type": "object",
    "properties": {..

它可以正常工作并按照我的要求呈现整个表单。 但是我想从Web服务加载数据。

因此,我尝试将模式设置为空,然后通过单击按钮进行更改,但它没有起作用。我的意思是,我从服务获取了模式,但表单没有更改。 例如,代码中的以下内容。

$scope.schema = {};
$scope.changeSchema= function(){
    $scope.schema = {
        "$schema": "http://json-schema.org/draft-04/schema#",
        "title": "  Schema number two that I want",
        "type": "object",
        "properties": {
}

我想要的是选择模式加载并将表单更改为选定的模式。 非常感谢。

你发布了两个代码片段,它们看起来大部分相同;我在这里并没有看到一个问题或者错误的陈述。"它没用"从来不是一个好的问题陈述。 - Claies
嗯,这些代码片段并不是很重要。我只想展示我正在改变架构。尽管架构已经改变,但呈现出来的表单却没有变化。 - Ján Polaček
你没有展示完整的代码来进行这个更改,但我怀疑你没有触发$scope.$broadcast('schemaFormRedraw')事件,该事件在此文档中有详细说明:https://github.com/Textalk/angular-schema-form/blob/master/docs/index.md#updating-form - Claies
似乎这就是我一直在寻找的东西。但是,在使用它后出现了"[Error] Error: Not implemented. Only type "object" allowed at root level of schema."错误。 - Ján Polaček
1个回答

1
正如Claies在他们的评论中指出的那样,您需要触发一个schemaFormRedraw广播。但是在加载时,错误是由于您拥有的模式上的验证,该模式为 {} ,这将需要一个临时模式,以下内容应该可以工作:
$scope.schema = { "type": "object", "properties": {} }};
$scope.changeSchema = function() {
    $scope.schema = {
        "$schema": "http://json-schema.org/draft-04/schema#",
        "title": "  Schema number two that I want",
        "type": "object",
        "properties": {...}
    }
    $scope.$broadcast('schemaFormRedraw');
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接