2016-08-19 7 views
1

私は、plotting markerまたはpolylinesのような操作を行うマップを使用するプロジェクトに取り組んでいます。構造体複数のマップサービスプロバイダーをサポートするためのangularjsコード

機能はうまくいきますが、私は複数のマップサービスプロバイダを使用する上で難題に直面しています。

オープンレイヤーを使用して同じセット操作を実行したいと考えています。そのためには、コントローラーやビューのようなすべての場所で変更する必要があります。さらに、私は必要なフォーマットでコントローラにデータを送るサービスを持っています。

しかし、クライアント側で異なるマップサービスプロバイダの抽象レイヤーを作成する方法がわかりません。

私は、コントローラ

内のすべてのマップ関連のロジックは基本的に私は変化の最小数と乗数サービスプロバイダを切り替えるに役立ついくつかのガイドラインと提案を探していました。

は私のコントローラのコードに従う:

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

はそれを行うには良い方法はありますか?

他にも多くの従属機能がありますが、シンプルさを維持していません。

私は次のアイデアを試してみました:

は、私はできませんよ二つの異なるコントローラを書いて、ルートでコントローラを変更が、1つのコントローラで行われた変更は、私は、文字通り他に方法の同じセットをコピー&ペーストするかどうかクリーンコードを維持するため

注:アプリケーションは、Googleマップ、openalyers、リーフレットのような複数のサービスプロバイダをサポートすることができます。

答えて

0

正しく理解すれば、ロジックを抽出してアプリケーションのどこでも使用できるようにしたいのですか?

もしそうなら、これを達成できるかどうかを知る方法は2つあります。まず、ロジックをカプセル化するサービスを作成することができます。そうすれば、それを使用する必要がある各コントローラに注入して、そのようにメソッドを呼び出すことができます。

また、$ rootレベルで関数を宣言することもできます。つまり、アプリケーション内の任意のスコープでアクセスできます。 OpenLayersをがある特定の機能がによって選ばれるべきと言っている場合

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

+0

が、私は私のコントローラは、すなわちパラメータに基づいて、オーケストレーターとして機能するようにしたいあなたに感謝:ここ

は、あなたがこれを実現したい方法ですコントローラ、またはGoogleマップの場合は、別の機能のセットをコントローラが選択し、それに対応するものを探してください –

関連する問題