схема, добавляющая пользовательский ввод в массив схемы - PullRequest
0 голосов
/ 29 мая 2018

Фон

Я создаю форму, используя angular-schema-form

Настройка

Я пытаюсь создать массив элементов, которые пользователь может создать с помощью формы.Таким образом, пользователь может добавлять в массив столько элементов, сколько ему нужно.

На данный момент элементы в массиве содержат тип команды.

Тип команды должен представлять собой раскрывающийся список, содержащий SSH, RESTи все, что пользователь вводит в качестве персонализированного типа команды.

Код до настоящего времени

SCHEMA

{
  "type": "object",
  "properties": {
    "personalizedCommandType": {
      "title": "Personalized Command Type",
      "type": "string"
    },
    "commands": {
      "type": "array",
      "title": "Actions",
      "items": {
        "type": "object",
        "properties": {
          "commandType": {
            "title": "Command Type",
            "type": "string",
            "enum": [
              "REST",
              "SSH"
            ]
          }
        }
      }
   }
  }
}

ФОРМА

[
  {
    "type": "help",
    "helpvalue": "<h5>Command</h5>"
  },
  {
    "key":"personalizedCommandType"
  },
  {
    "title":"Command",
    "key": "commands",
    "items": [
      "commands[].commandType"
    ]
  }
]

Этот код можно проверить здесь: http://schemaform.io/examples/bootstrap-example.html.Просто скопируйте и вставьте мой код.

Вопрос

Как видно, у моего кода есть поле с персонализированным типом команды и массив раскрывающихся списков с2 варианта SSH и REST.Но я хочу, чтобы он также содержал значение персонализированного типа команды после того, как пользователь ввел его.

ПРИМЕЧАНИЕ

copyValueTo, кажется, не обладает той функциональностью, которую я хочу, учитывая, что она может изменять только значения в модели , ноЯ хочу, чтобы он изменил массив перечислений в схема .

1 Ответ

0 голосов
/ 30 мая 2018

Используйте параметр onChange:

[
  {
    "type": "help",
    "helpvalue": "<h5>Command</h5>"
  },
  {
    "key":"personalizedCommandType"
     onChange: "updateSchema(modelValue,form)"
  },
  {
    "title":"Command",
    "key": "commands",
    "items": [
      "commands[].commandType"
    ]
  }
]

Обновите схему:

var defaultEnum = ["REST","SSH"];

$scope.updateSchema = function(modelValue,form) {
    var currentEnum = $scope.schema.commands.items.properties.commandType.enum;
    angular.copy(defaultEnum, currentEnum);
    if (modelValue) {
        currentEnum.push(modelValue);
    }; 
    $scope.$broadcast('schemaFormRedraw');
};
...