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