tulov / angular-yandex-map

AngularJS directive to work with Yandex maps
173 stars 58 forks source link

Ввод координат #14

Closed SkyQuant closed 10 years ago

SkyQuant commented 10 years ago

Я так понимаю, что таким образом будет производится только инициализация, но не прослушивание:

А как должен выглядеть код, если нужно ввести обе координаты через input форму вручную или вытащить из репозитария после его подгрузки? Похоже, наиболее близкий пример этот: http://tulov-alex.ru/2.1/geolocation/api, но всё же пока трудно применимый для конкретного случая.

tulov commented 10 years ago

А в чем собственно проблема?

  1. Создаете два input, привязав каждый к координате.
  2. После их заполнения формируете гео объект, и добавляете его к массиву объектов. ВСЕ. Похожий пример в разделе производительность. Да, и если массив гео объектов заполняется не из окружения angular, нужно дополнительно вызвать $scope.$digest() или $scope.$apply(), чтобы изменения отобразились на карте.
SkyQuant commented 10 years ago

Проблема в том, что центр карты не меняется при изменении переменных lon и lat. $scope.center = [$scope.lon, $scope.lat ];

tulov commented 10 years ago

Специально только что проверил. Все работает. Вот код. <ya-map ya-zoom="10" ya-center="{{ center }}"></ya-map> <input type="text" ng-model="lon" placeholder="lon"> <input type="text" ng-model="lat" placeholder="lat"> <button ng-click="setCenter()">Изменить центр</button> В контроллере: $scope.center=[40.925358,57.767265]; $scope.lon = 0; $scope.lat=0; $scope.setCenter = function(){ //работают оба подхода /* $scope.center[0] = +$scope.lon; $scope.center[1]= +$scope.lat; */ //и так тоже $scope.center=[+$scope.lon,+$scope.lat]; }

Но если вы думали что единожды написав $scope.center = [$scope.lon, $scope.lat ]; все будет автоматом обновляться само, то так быть и не должно, так как в этом случае $scope.center получает значение только один раз, при инициализации, и потом не меняется, даже если вы меняете $scope.lat или $scope.lon. Как вариант в этом случае можно повесить на lat и lon $watch, чтобы автоматически обновлять центр.

SkyQuant commented 10 years ago

А вот допустим я ставлю координаты на $watch. Как их можно загрузит в балон вместо event? Делаю как-то так, но это наобум: var coords = [lon, lat]; map.balloon.open(coords, { contentBody: 'Долгота: ' + coords[0].toPrecision(6) + ',\n Широта: ' + coords[1].toPrecision(6) }); Из документации тоже не могу понять, как отправить переменные вместо события. http://api.yandex.ru/maps/doc/jsapi/2.0/ref/reference/Balloon.xml

tulov commented 10 years ago

В документации есть пример, там все понятно. Простo задайте balloon.options={...}, где вместо ... добавьте требуемое вам содержимое. Скорее всего так будет все работать. Но это уже ни коем образом не относиться к моему компоненту, а требует просто знание yandex api. Так что смотрите документацию, и Бог вам в помощь. Эту ветку я закрываю. Если возникнут пожелания или вопросы по моему компоненту, буду рад помочь.