Angular: HTTP-клиент, преобразующий дерево в виде структуры данных - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть с сервера следующая структура (в зависимости от структуры JSON)

Orga1
| + Department1
| |  + Role1
| |  + Role2
| + Department2
| |  + Role10
| |  + Role11
Orga 2
| + DepartmentAB
| |  + RoleAB1
...

Я думал об объекте в Angular, как

export interface Organization {
  name: string;
  lstDeparments: Department [];
}
export interface Department {
  name: string;
  lstRoles: string [];
}

Но почему-то я понятия не имею, как настроить соответствующий интерфейс в Angular. Поскольку атрибут name динамически изменяется (например, Orga1, Orga2), и список атрибутов также должен динамически заполняться содержимым.

Есть идеи, как правильно настроить interface? (иметь автоматическое преобразование)

1 Ответ

2 голосов
/ 02 апреля 2019

У вас есть определенный синтаксис для такого типа структуры данных:

interface Payload {
  [key: string]: Orga;
}

interface Orga {
  [key: string]: Department;
}

interface Department {
  [key: string]: Role;
}

Если вы хотите получить список Orgas, вы должны выполнять итерации по объекту, а не по массиву.

Вы можете сделать это с Object.keys или в более новых браузерах (или, если у вас есть полифилл), Object.entries:

const orgas = Object.keys(payload).map(key => payload[key]);
const orgas = Object.entries(payload).map(([key, value]) => value);

Вы также можете использовать функцию генерации - Symbol.iterator для перебора ваших объектов, но я думаю, что это немного излишне:

const payload = {
  orga1: { name: 'orga 1' },
  orga2: { name: 'orga 2' },
  [Symbol.iterator]: function *() {
    for (const key of Object.keys(this)) {
      yield this[key];
    }
  }
};

for (const value of payload) {
  console.log(value);
}
...