just-boris / angular-ymaps

Yandex Maps API as an Angular JS direcitive
http://catatron.com/angular-ymaps/
51 stars 22 forks source link

Исправлен небольшой баг и добавлено смещение карты, при изменении координат центра в $scope! #2

Closed svetlyak40wt closed 10 years ago

just-boris commented 10 years ago

У вас упали unit-тесты. Это произошло потому что в них не ожидался вызов метода map.panTo. Я реализовал функционал обновления центра и масштаба карты и добавил соответствующий пример Ошибка с неопределенным newBounds у меня не возникала, прежде чем что-то исправлять, хотелось бы знать, что именно ломается. Предлагаю вам разобраться в этом и дополнить этот pull-request тестом для воспроизведения ошибки. Не забудьте сделать rebase относительно master-а, я его обновил

svetlyak40wt commented 10 years ago

Борис, я так и не смог вспомнить, при каких обстоятельствах проявлялся баг. Сейчас поставил твою новую версию — всё работает. Большое спасибо!

Кстати, как на счет того, чтобы добавить в модуль возможность загружать объекты по урлу, используя geoXml, а то сейчас для этого приходится городить такой код:

ymapsLoader.ready(function (ymaps) {
    ymaps.geoXml.load(map_url)
        .then(function (res) {
            var map = angular.element($('.the-map')).scope().map;
            map.geoObjects.add(res.geoObjects);
        }, function (error){
            $scope.log.error('Не получилось загрузить xml карту: ' + error);
        });
});
just-boris commented 10 years ago

Очень рад, что у вас получилось это сделать, пусть даже не совсем идеальным кодом. Сейчас сделал одно важное изменение, благодаря которому до карты стало проще достучаться. Теперь вы можете написать директиву ymap-geoxml которая будет делать то, что вам нужно. Примерный код выглядит так:

myApp.directive('ymapGeoxml', function() {
    return {
        restrict: "EA",
        require : '^yandexMap',
        link    : function ($scope, elm, attr, mapCtrl) {
             ymaps.geoXml.load(map_url)
                 .then(function (res) {
                        var map = angular.element($('.the-map')).scope().map;
                        map.geoObjects.add(res.geoObjects);
                 }, function (error){
                       $scope.log.error('Не получилось загрузить xml карту: ' + error);
             });
        }
    }
});

А верстка получится такая:

<yandex-map center="center" zoom="zoom">
    <ymap-geoxml url="xmlUrl"></ymap-geoxml>
</yandex-map>
just-boris commented 10 years ago

все изменения попали в текущий master