Ищет несколько советов, если это возможно.AngularJS Circular Dependency - Трансформаторы
При работе с API и вложенными ресурсами я пытаюсь создать набор «трансформаторов», которые форматируют данные в более удобный формат.
При этом мне нужно создать круговую зависимость из-за природы вложенных ресурсов и что отношения могут идти в одну сторону.
Вот пример:
Клиент Трансформатор
angular.module('services.transformers.clients', [
])
.service('ClientTransformer', function ClientTransformer(DateService, EventTransformer){
var transformer = this;
transformer.transform = function(client) {
clientObject = {
id: client.id,
name: client.name
};
if(client.events) {
clientObject.events = includeEvents(client);
}
return clientObject;
}
transformer.transformCollection = function(clients) {
for(var key in clients.data) {
if(clients.data.hasOwnProperty(key)) {
clients.data[key] = transformer.transform(clients.data[key]);
}
}
return clients.data;
}
function includeEvents (client) {
return EventTransformer.transformCollection(client.events);
}
})
;
Event трансформаторные
angular.module('services.transformers.events', [
])
.service('EventTransformer', function EventTransformer(DateService, ClientTransformer){
var transformer = this;
transformer.transform = function(event) {
eventObject = {
id: event.id,
title: event.title,
description: event.description,
client: includeClient(event),
starts: DateService.createDateFromObject(event.starts),
ends: DateService.createDateFromObject(event.ends)
};
return eventObject;
}
transformer.transformCollection = function(events) {
for(var key in events.data) {
if(events.data.hasOwnProperty(key)) {
events.data[key] = transformer.transform(events.data[key]);
}
}
return events.data;
}
function includeClient (event) {
// check if client is an ID or nested data. If nested, transform then return
return (event.client.data) ? ClientTransformer.transform(event.client.data) : event.client;
}
})
;
Как вы можете себе представить, есть еще несколько отношений с каждым из этих ресурсов, но эти службы должны зависеть друг от друга. Я мог бы получить доступ к ресурсу Event и иметь вложенные клиенты или наоборот.
Угловое действительно не нравится, и выдает ошибку круговой зависимости, но я не уверен, как я могу обойти это, или лучший способ структурирования моего приложения.
Любая помощь была бы оценена
Спасибо!
это хак, так что им отправляю это как комментарий, вы можете создать угловую переменную 'Transformers' и каждый трансформатор на создание будет добавлено к этой переменной. и вместо того, чтобы вводить трансформатор, вы просто вводите эту переменную. таким образом, вы можете избавиться от круговой зависимости. что правильно? я скажу, редизайна вашего кода – user902383