Angular-Leaflet-Directive と $resource を使用して Web サービスを呼び出す 2 つの異なる Angular サービスからのデータを使用してマップを生成しようとしています。これらのサービスは、緯度/経度の値を含む JSON メッセージを返し、地図上にマーカーを設定します。
ただし、サービスからデータを使用するためのディレクティブを取得できません。
サービスがスコープを更新しているため、正常に動作していることがわかります。コントローラーに値をハードコードすると、マップ マーカーが正しくレンダリングされます (たとえば、以下の「中心」を参照)。私がやりたいことは、この例に非常に似ています
これが私のコードです:
コントローラ:
angular.module('myDetails', ['leaflet-directive', 'shop', 'home'])
.controller('MyDetailsCtrl', ['$scope', '$routeParams', '$http', '$q', '$rootScope', 'shopService', 'homeService', function ($scope, $routeParams, $http, $q, $rootScope, shopService, homeService) {
function getShop() {
var d = $q.defer();
var shop = shopService.get({shopId: $routeParams.shopId}, function (shop) {
d.resolve(shop);
});
return d.promise;
}
function getHome() {
var d = $q.defer();
var home = homeService.get({homeId: $routeParams.homeId}, function (home) {
d.resolve(home);
});
return d.promise;
}
$q.all([
getShop(),
getHome()
]).then(function (data) {
var shop = $scope.shop = data[0];
var home = $scope.home = data[1];
var markers = {
shop: {
lat: $scope.shop.loc.coordinates[0],
lng: $scope.shop.loc.coordinates[1],
draggable: false,
message: $scope.shop.name,
focus: true
},
home: {
lat: $scope.home.loc.coordinates[0],
lng: $scope.home.loc.coordinates[1],
draggable: false,
message: $scope.home.name,
focus: true
}
};
console.log("Markers are " + angular.toJson(markers));
$scope.markers = markers;
});
$scope.center = {
lat: 53.26,
lng: -2.45,
zoom: 6
};
}]);
私が見つけたのは、私の2つのサービスが返され、スコープが値で更新されますが、これはangular-leaflet-directiveに渡されないということです.
ディレクティブに関するAngularのドキュメントは、ディレクティブの次のコードが子スコープを親スコープにリンクして、両方が更新されることを示唆しています。
scope: {
center: '=center',
maxBounds: '=maxbounds',
bounds: '=bounds',
marker: '=marker',
markers: '=markers',
defaults: '=defaults',
paths: '=paths',
tiles: '=tiles',
events: '=events'
}
しかし、それは私にはうまくいかないようです。ただし、angular-leaflet-directive パスの例では、これが許可されているように見え (マーカーの追加、マーカーの変更などを行うことができます)、マップはリアルタイムで更新されます。
サービスが再開されたら、マップにマーカーを表示するにはどうすればよいですか?
これについて Stackoverflow にも同様の質問がありますが、これらの質問に対する答えは、ディレクティブ内にサービス呼び出しを含めることです。コントローラーは、フォーム送信の処理など、単なるサービス呼び出しよりも多くの機能を提供しており、同じデータへのアクセスを必要とするため、これを行いたくありません。