2016-08-19 74 views
1

我的工作涉及地圖的使用它在哪裏做的業務,如plotting markerpolylines的項目。結構angularjs代碼支持多種地圖servcie提供商

功能正常,但我面臨使用多個地圖服務提供商的困難。

我想使用開放層執行相同的設置操作。爲此,我必須在所有地方進行更改,如控制器和視圖。另外,我有一種服務,以所需的格式將數據送入控制器。

但我不知道如何創建在客戶端不同的地圖服務提供商的一個抽象層。

我都在控制器

基本上我在找一些指導和建議,這將有助於有改動的最小數量的倍增器服務提供商之間的切換相關的邏輯地圖。

跟隨我的控制器代碼:

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(); 
}) 

有沒有更好的辦法做到這一點?

還有很多其他的依賴函數以及我沒有把保持簡單。

我試圖後續想法:

寫了兩個不同的控制器,在該路由改變控制器,但如果任何變化在一個控制器由我會逐字複製粘貼同一套方法,其他我不能夠保持一個乾淨的代碼

注意:該應用程序可以支持多種服務提供商,如谷歌地圖,開戶人員和傳單。

回答

0

如果我理解正確的話,要提取出一些邏輯,以便它可以在任何地方應用程序中使用?

如果是這樣,我知道有兩種方法可以實現這一點。首先,您可以創建一個封裝邏輯的服務。這樣你可以將它注入到每個需要使用它的控制器中,並且只需調用這些方法即可。

或者,您也可以在$根級別聲明的功能,這樣,它是在應用程序的任何地方的任何範圍訪問。

這裏是你如何做到這一點:

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

+0

謝謝你,我想我的控制器充當基礎上的參數配器即,如果說的OpenLayers某些特定的功能應該由採摘控制器,或者如果它是谷歌地圖應該由控制器拿起另一組特定的功能,並做相應的事情,這是尋找什麼 –