子要素を持つ AngularJS ディレクティブでいくつかのデータを初期化しようとしています。この場合、要素はリーフレットを使用して接続される に<map>
置き換えられます。ディレクティブまたは関数に、宣言された子要素からコレクションを作成<div>
する方法があるかどうかを調べようとしていました。次のようなものです。compile
link
markers
<div ng-app="dashboard">
<div ng-controller="DashboardCtrl">
<map id="devicemap" tile-handle="test.map-fy18v14h" min-zoom="3" max-zoom="9" markers="markers">
<marker lat="44" lng="-88.5" description="From the Server (Razor)" />
<marker lat="44.1" lng="-88.6" description="From the Server 2 (Razor)" />
</map>
</div>
<marker>
ディレクティブでは、要素を繰り返し処理してコレクションを生成したいと考えています。これはコンパイルで発生する必要がありますか? または、実際のテンプレートが挿入される前に「偽の DOM」にアクセスできると誤解していますか?
module.directive('map', function () {
return {
restrict: "E",
replace: true,
scope: {
markers: "=markers"
},
template: '<div class="map"></div>',
link: function link(scope, elm, attributes) {
var map = L.map(attributes.id, {
dragging: true,
zoomAnimation: true
}).setView([45.505, -88.09], 6);
L.tileLayer('http://{s}.tiles.mapbox.com/v3/' + attributes.tileHandle + '/{z}/{x}/{y}.png', {
attribution: "<a href='http://mapbox.com/about/maps' target='_blank'>Terms & Feedback</a>",
}).addTo(map);
// This is where I am stuck... is there a way to get the "marker" elements?
// the following does not work...
var markerElements = elm.children('marker');
// now would like to loop over markerElements, grab the attributes and add them
// to the map (and/or the markers collection).
};
});
ajax 呼び出しを使用してマーカーを設定することはできますが、この手法を使用すると、ページが最初に要求されたときにサーバーにデータを事前設定することができます。