- PVSM.RU - https://www.pvsm.ru -
Приветствую всех, уважаемые харбожители!
В данном посте речь идет о том, как подружить карты яндекса и javascript framework angular.js для их совместной работы. Можно, конечно, использовать и google map, но для стран СНГ их качество оставляет желать лучшего.
Немного погуглив, и не найдя готового решения, пришлось писать свое. Кому интересно, добро пожаловать под кат.
Репозиторий git [1] Demo [2]
Нужно было реализовать следующие требования:
В настоящий момент они все реализованы.
Описывать в этом топике, как все работает не вижу смысла, лучше расскажу, как этим пользоваться.
Директива ya-map
предназначена для создания карты в div
-е, для которого применяется. Карту можно настраивать через настройку провайдера YandexMap
, который отвечает за внешний вид и поведение карты по умолчанию.
Чтобы понять, насколько все просто, достаточно запустить посмотреть файлы примеров из папки example. Предполагается что читатель знаком с основами пользования git, в состоянии клонировать приложение и подгрузить все его зависимости с помощью bower.
Итак, для работы карты нужно:
<div ya-map ng-model="…" ya-select-index="…" ya-properties="…"></div>
Всегда должны присутствовать следующие обязательные атрибуты, при этом они не обязательно должны указывать на реальные объекты в scope:
ng-model
— задает массив объектов для отображения на карте. ya-select-index
— индекс выбранного объекта в массиве ng-model
. ya-properties
— задает свойства карты для отображения, такие как центр.
После этих манипуляций мы получим вполне работоспособную карту, на которой будут выведены все гео. объекты из массива ng-model
. Если не задан ее центр, тогда будет установлено местоположение пользователя, и оно будет использовано как центр карты.
И один нюанс, чтобы карта отобразилась, родительский div должен иметь ширину и высоту, отличную от нуля.
Чтобы получить расширенное поведение карты, нужно использовать следующие опции:
Опция | Возможные значения | Описание |
---|---|---|
mode | view, select, edit, add | По умолчанию: view. Карта может работать в 4 режимах, соответственно: просмотр, выбор, редактирование и добавление. Каждый режим поддерживает возможности предыдущего режима и плюс к ним еще:
|
geoTypes | point, linestring, circle, rectangle, polygon, all | По умолчанию: all. Типы объектов, с которыми будет работать карта. Задается в строковом формате через пробел. |
cluster | true, false | По умолчанию: false. Использовать или нет систему кластеризации карты. |
showAll | true, false | По умолчанию: false. При первой отрисовке карты установить масштаб и центр так, чтобы можно было одновременно показать все гео. объекты, или не нужно. |
controls | zoomControl, typeSelector, mapTools, scaleLine, miniMap, smallZoomControl | По умолчанию: undefined. Элементы управления, которые добавляются к элементам управления, заданным в провайдере YandexMap , для отображения на карте |
Эти опции задаются через атрибут директивы, например: <div ya-map="{mode:'add'}"></div>
Чтобы задать обязательное наличие на карте хотя бы одного гео. объекта, нужно использовать атрибут ya-required
, который может принимать любое выражение angular. Он работает так же, как и любые другие атрибуты с валидацией в angular, такие как ng-required
.
Данный модуль еще не доведен до состояния release, но мной он успешно используется в одном из моих приложений. Хотелось бы услышать конструктивную критику, пожелания и все в том же духе.
За сим разрешите откланяться.
Автор: Tulov_Alex
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/46810
Ссылки в тексте:
[1] Репозиторий git: https://github.com/tulov/angular-yandex-map
[2] Demo: http://tulov-alex.ru
[3] Источник: http://habrahabr.ru/post/199290/
Нажмите здесь для печати.