0
如果可能的话寻找一些建议。AngularJS循环依赖 - 变形金刚
在处理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);
}
})
;
事件变压器
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;
}
})
;
正如你可以想像,有过这些资源的几个关系但这些服务需要相互依赖。我可以访问事件资源,并有嵌套的客户端或副本。
Angular确实不喜欢这样,并抛出循环依赖错误,但我不知道如何解决这个问题,或者更好的方式来构建我的应用程序。
任何帮助,将不胜感激
谢谢!
这是一个黑客,因此IM张贴的评论,你可以创建角变量,'Transformers'和创造每个变压器将被添加到该变量。而是注入变压器,您只需注入该变量。通过这种方式你可以摆脱循环依赖。什么是正确的方式?我会说重新设计你的代码 – user902383