Форма схемы Angular6 JSON для массива элементов

#angular6-json-schema-form

#angular6-json-schema-form

Вопрос:

Я пробую форму Angular6 JSON для своего приложения и застрял в проблеме наличия схемы массива

Базовый макет выглядит следующим образом

 {
  "schema": {
        "type": "array",
        "properties": {
            "type": { "type": "string" },
            "number": { "type": "string" },
        }
  },
  "layout": [
    { 
      "type": "array",
      "items": [ {
        "type": "div",
        "displayFlex": true,
        "flex-direction": "row",
        "items": [
          { "key": "type", "flex": "1 1 50px",
            "notitle": true, "placeholder": "Type"
          },
          { "key": "number", "flex": "4 4 200px",
            "notitle": true, "placeholder": "Phone Number"
          }
        ]
      } ]
    }
  ],
  "data": [
      { "type": "cell", "number": "702-123-4567" },
      { "type": "work", "number": "702-987-6543" }
    ]
}
  

Но я не получаю ожидаемого результата, то есть форма предварительно заполнена данными

 [
          { "type": "cell", "number": "702-123-4567" },
          { "type": "work", "number": "702-987-6543" }
        ]
  

См.:https://hamidihamza.com/Angular6-json-schema-form /

введите описание изображения здесь

Ответ №1:

На основе вашего кода есть некоторые части, которые вам, возможно, потребуется пересмотреть.

  • Тип схемы должен быть либо object, либо boolean на основе документацииhttp://json-schema.org/latest/json-schema-core.html
  • В разделе схемы кажется, что вы хотите, чтобы тип и номер были вашими свойствами экземпляра JSON. Имея это, вы можете передать только один экземпляр данных в фреймворк для заполнения ваших свойств, потому что фреймворк не может решить, какое значение использовать для вашего свойства типа string.
  • В случае поиска наличия массива типа и номера у вас может быть свойство типа «номер телефона» с типом array. ниже приведен пример из angular6-json-schema flex layout example, который, я думаю, у вас был в качестве ссылки.
 "schema": {
 ...
   "phone_numbers": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "type": { "type": "string", "enum": [ "cell", "home", "work" ] },
          "number": { "type": "string" }
        },
        "required": [ "type", "number" ]
}
  

И передайте ваши данные, имеющие что-то вроде следующего:

 "data": {
...
"phone_numbers": [
      { "type": "cell", "number": "702-123-4567" },
      { "type": "work", "number": "702-987-6543" }
    ],
}