Я пытаюсь создать карту, используя Angular-Leaflet-Directive, и данные из двух разных Угловых сервисов, которые называют веб-сервисы с использованием $ resource. Эти службы возвращают сообщения JSON, которые включают значения lat/long для заполнения маркеров на карте.Служба/контроллер AngularJS, не обновляющая директиву с угловым листом
Однако я не могу получить директиву, чтобы использовать данные из служб.
Я вижу, что мои службы обновляют область действия, поэтому они работают нормально, а маркеры карт отображаются правильно, если я жестко кодирую значения в контроллере (например, см. Ниже «center»). То, что я хочу сделать, это очень похоже на эту example
Вот мой код:
Контроллер:
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 documentation on directives предполагает, что следующий код в директиве будет связывать дочерние рамки для родительской области, так что они оба обновлены:
scope: {
center: '=center',
maxBounds: '=maxbounds',
bounds: '=bounds',
marker: '=marker',
markers: '=markers',
defaults: '=defaults',
paths: '=paths',
tiles: '=tiles',
events: '=events'
}
, но это не похоже на работу для меня. Тем не менее, angular-leaflet-directive path example, похоже, разрешает это (вы можете добавлять маркеры, менять маркеры и т. Д.) И обновления карт в режиме реального времени.
Что нужно сделать, чтобы маркеры отображались на моей карте после возвращения служб?
Обратите внимание, что для этого есть вопрос о Stackoverflow, но ответ на эти вопросы заключается в включении служебных вызовов в Директиву. Я не хочу этого делать, поскольку контроллер предлагает больше функциональности, чем просто прямой вызов службы, такой как обработка формы отправки и т. Д. И требует доступа к тем же данным.