#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" }
]
Ответ №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" }
],
}