just-boris / angular-ymaps

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

Получить объект карты в родительском контроллере #17

Open dub34 opened 8 years ago

dub34 commented 8 years ago

Добрый день. Возник вопрос. Как можно получить объект карты в родительском контроллере. Например я хочу добавить функцию ресайза карты по кнопке, сворачить\разворачить ее по высоте. Добавил в родителе функцию toggle. Повесил ее на клик кнопки. Но вызвать map.container.fitToViewport() не могу, потому что в родителе не знаю как получить карту. ничего лучше, чем навесить свою директиву и в ней сделать require: '^yandexMap' а затем в link сделать

$scope.$emit('mapLoaded', mapCtrl.map);

я не придумал. В родителе сделал

  $scope.$on('mapLoaded', function (evnt, data) {
            mainCtrl.map = data;
        });

2 вопрос Как убрать не нужные контролы на карте? я в своей директиве делаю

mapCtrl.map.controls
                    .add('"smallZoomControl')
                    .remove('zoomControl')
                    .remove('searchControl')
                    .remove('typeSelector')
                    .remove('trafficControl');

и получаю. Хотя карта уже 100% загружена. angular.js:12477 TypeError: s is not a constructor

и 3 момент. Когда делаю map.container.fitToViewport() получаю ошибку angular.js:12477 Error: [$rootScope:inprog] http://errors.angularjs.org/1.4.7/$rootScope/inprog?p0=%24apply Может вы знаете более красивое решение. Спасибо

just-boris commented 8 years ago

Ответ на первый вопрос:

Насколько я знаю, Yandex Maps API умеет сам отслеживать размеры контейнера: https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/reference/Map-docpage/#param-options.autoFitToViewport Надо лишь научиться принимать опции карты как аргумент директивы. Видимо, таким образом

$scope.mapOpts = {
     autoFitToViewport: 'always'
}

<yandex-map options="mapOpts"></yandex-map>

Если настройка autoFitToViewport поможет вам, присылайте PR, с добавлением возможности ее поменять. (Включать для всех ее не получится, она дорогая по производительности)

just-boris commented 8 years ago

Второй вопрос: Контролы обсуждаются в другой issue https://github.com/just-boris/angular-ymaps/issues/10 Если ее решить, то все будет как надо

just-boris commented 8 years ago

Третья проблема возникает из-за события boundschange. Проще всего этого избежать, если не делать fitToViewport() руками, а пользоваться опцией autoFitToViewport

dub34 commented 8 years ago

Спасибо. Попробую разобраться