LINUX.ORG.RU

Шаблон балуна в яндекс картах

 ,


0

1

Делаю яндекс карты на компоненте yaMap для angular. Разметка такая

<ya-template-layout ya-key="balloonTemplate">
   <div class="catalog-balloon" ng-click="console.log(1)">
        <h2>{{ properties.advert.title }}</h2>
        <div class="date" ng-show="properties.advert">{{ properties.advert.date }}</div>
   </div>
</ya-template-layout>

<ya-map id="business-map" ...>
             <ya-cluster>
                    <ya-geo-object ng-repeat="o in geoObjects"
                                   ya-source="o"
                                   ya-event-balloonopen="balloonOpen($event)"
                                   ya-options="{balloonContentLayout:'balloonTemplate'}"></ya-geo-object>
             </ya-cluster>
</ya-map>

Карта отображается, балун при щелчке на объекте отображается, поля внутри балуна тоже работают. Но внутри балуна не работает ни одна директива, пробовал ng-click, ng-show, ng-if. Куда читать, где смотреть откуда такое поведение не знаю

Ответ на: комментарий от x3al

Оказалось что хтмл внутри ya-template-layout совсем не обрабатывает ангуляром, а язык шаблонов внутри него это подобие шаблонов django, которые обрабатываются самими яндекс картами. Пока не знаю как заставить ангуляр автоматически компилировать хтмл внутри с привязкой нужного scope. Может есть идеи?

forkhammer
() автор топика
Ответ на: комментарий от forkhammer

Стоп, в смысле эти языки шаблонов пересекаются и {{ properties.advert.date }} — это не ангуляр? Возможно, скормить заэскейпленные {{ яндекс-картам после обработки ангуляром и сработает, но... почему бы не определить link для yaTemplateLayout, а внутри делать $compile() всего этого элемента с нужным scope? В link попанет уже обработанный шаблонизатором яндекса элемент и можно будет издеваться над ним как угодно.

Ну или возвращать $compile, не применённую к $scope, из compile(). Должно работать.

Можешь сделать другую директиву, если допиливать непосредственно ya-template-layout недостаточно энтерпрайзно для тебя.

x3al ★★★★★
()
Ответ на: комментарий от x3al

{{ properties.advert.date }} - ага, это не ангуляр, а внутренний язык шаблонов для яндекс карт. Сделать автоматический $compile содержимого балуна мне пока знание ангуляра не позволяет

forkhammer
() автор топика
Ответ на: комментарий от forkhammer

Сделать автоматический $compile содержимого балуна мне пока знание ангуляра не позволяет

Млин. $compile

templateLayoutFactory.create(key, html, scope.overrides);

Тут в html — element.html(), то есть шаблон, который тебе нужно отрендерить ангуляром.

Делаешь вместо этого

compiledHtml = $compile(html)(scope) // or $compile(html)(scope).contents() if you wish
templateLayoutFactory.create(key, compiledHtml, scope.overrides);

Проблема — в том, что у тебя isolated scope чуть выше (198 cтрока если ориентироваться по гитхаб-версии). Прокинешь нужные вещи вроде properties либо сделаешь не-isolated в этот scope сам. Если что — я без понятия, как заставить яндексКарты отдать эти properties (в крайнем случае опишешь это вытаскивание в контроллере).

Ну и inject этого $compile в саму директиву yaTemplateLayout понадобится.

x3al ★★★★★
()
Последнее исправление: x3al (всего исправлений: 1)
Ответ на: комментарий от x3al

Ну и дисклеймер: я не пробовал всё это, поскольку мне лень с нуля делать jsfiddle.

x3al ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.