LeafletJS を使用してマップを操作する AngularJS でアプリを構築しています。これは、私がフェーズと呼ぶものに分かれたさまざまな可能な操作を提供します。これらの各フェーズには、UIRouter
コントローラーとテンプレートを備えた状態があります。
私は現在、サービスを通じてリーフレット機能を提供しています。アイデアは、そのサービスが Leaflet マップを初期化し、状態のコントローラーへの制限されたアクセスを提供することでした。setupMarkersInteractions
したがって、これらのコントローラーは、たとえばマップ上にマーカーを配置できるようにするコールバックをセットアップするなどのサービス関数を呼び出します。
ただし、Leaflet のleaflet.map()
関数を使用してマップを初期化するときに問題が発生していますError: Map container not found
。これは、Leaflet がマップを関連付ける HTML 要素を見つけられないことに関連しています。
現在、私はちょっとこれをやっています:
function mapService() {
var map;
return {
initializeMap : initializeMap,
setupMarkersInteractions : setupMarkersInteractions
};
function initializeMap() {
map = leaflet.map('map');
}
function setupMarkersInteractions() {
map.on('click', markerPlacementCallback);
}
}
このinitializeMap
関数は、状態のテンプレートで宣言されている をleaflet.map
含む HTML 要素を探すように指示します。id='map'
さて、実際の質問ですが、これはある種のAngularJS サービスが HTML テンプレートにアクセスできないことに関連していますか? 問題については何も見つかりませんでしたが、サービスがビューに直接アクセスしないことは理にかなっていると思いました...
もしそうなら、どのような回避策を探るべきですか? を調べましたがleaflet-directive
、希望する柔軟性でカスタム コールバックを追加および削除する可能性はないようです (たとえば、Leaflet-Freedraw を使用して無料の描画機能を追加すると、複雑になります)。
leaflet.map
要素の引数を使用して直接使用することを検討しHTMLElement
ましたが、それでも機能させることができませんでした-想定されているものを渡していない可能性があります.