2016-08-19 3 views
1

Ich arbeite an einem Projekt, das die Verwendung von Karten beinhaltet, wo es Operationen gibt, wie plotting marker oder polylines.strukturieren Sie den angularjs Code, um mehrere Kartenserviceprovider zu unterstützen

Die Funktionalitäten funktionieren gut, aber ich habe Schwierigkeiten bei der Verwendung mehrerer Karten-Service-Provider.

Ich möchte denselben Set-Vorgang mit einer offenen Schicht durchführen. Um das zu tun, muss ich mich an allen Orten verändern, wie Controller und Ansichten. Außerdem habe ich einen Service, der die Daten im gewünschten Format an die Steuerung liefert.

Aber ich bin mir nicht sicher, wie Sie eine Abstraktionsschicht für verschiedene Karten-Service-Provider auf der Client-Seite erstellen.

Ich habe alles kartenbezogenen Logik in der Steuerung

Grundsätzlich ist ich für einige Richtlinien und Anregung suchen, die zwischen Multiplikator-Dienstleister mit minimaler Anzahl von Änderungen wechseln helfen.

Folgt meinem Controller-Code:

taxiFleetControlPanel.controller("overviewController", function ($scope,$location,sensorService,appService,nodeService,settingService,$timeout,$rootScope,instanceService,assetApiService) { 

//google maps 
function initMap() {.....} 
function addMarker(){.....} 
function addpolyLines(){....} 

//openlayer maps 
function openlayerInitMap() {.....} 
function openlayerAddMarker(){.....} 
function openlayerAddpolyLines(){....} 


if there is requriment to use openalyer map the i will comment initMap(); in the same controller 

funtion init(){ 
initMap(); 
//openlayerInitMap() 
} 

init(); 
}) 

Gibt es einen besseren Weg, es zu tun?

Es gibt so viele andere abhängige Funktionen, und ich habe nicht auf Einfachheit eingestellt.

ich die Folge Idee versucht:

Schrieb zwei verschiedene Controller und änderte den Controller in der Strecke, aber wenn die jede Änderung i buchstäblich die gleiche Menge von Methoden, um andere Paste wird in einem Controller gemacht kopiert ich nicht in der Lage bin um einen sauberen Code zu erhalten

Hinweis: Die Anwendung kann mehrere Dienstleister wie Google Maps, Openalyers und Prospekt unterstützen.

Antwort

0

Wenn ich richtig verstehe, möchten Sie einige Logik extrahieren, damit es überall in Ihrer Anwendung verwendet werden kann?

Wenn ja, gibt es zwei Möglichkeiten, dass Sie dies erreichen können. Zunächst einmal könnten Sie einen Service erstellen, der die Logik kapselt. Auf diese Weise können Sie es in jeden Controller, mit dem Sie es verwenden müssen, einspeisen und die Methoden einfach aufrufen.

Alternativ können Sie die Funktionen auf $ root-Ebene deklarieren, auf diese Weise ist es in jedem Bereich in der Anwendung zugänglich.

Hier ist, wie Sie dies erreichen würde:

https://stackoverflow.com/a/15026440/5349719

+0

danke ich will mein Controller machen als Orchestrierung basierend auf den Parametern zu handeln, dh, wenn sagen openlayers bestimmte Funktionalität sollte durch die gepflückt werden Controller oder wenn es Google Map ist eine andere Reihe von spezifischen Funktionen sollte von der Steuerung abgeholt werden und entsprechende Sache, die was ist zu tun –

Verwandte Themen