2013-07-27 3 views
8

Я пытаюсь написать директиву для заполнения всплывающего маркера рекламного листка. Я ударился головой о стену, пытаясь понять, что я делаю неправильно. Мое всплывающее окно всегда пустое.Не удается получить всплывающее окно для работы с директивой angularjs (и частичным)

Любой успешно сделал это раньше?

Вот plunker показывает проблему: http://plnkr.co/edit/53bebb?p=preview

ответ

7

marker.bindPopup (е [0]); вместо marker.bindPopup (clonedElement [0]);

+0

Это работает. Можете ли вы объяснить, почему? Я думал, что если вы хотите прикрепить элемент к DOM, вы должны использовать clonedElement. Из docs: cloneAttachFn - Если предоставлен cloneAttachFn, функция ссылки будет клонировать шаблон и вызывать функцию cloneAttachFn, позволяющую вызывающему абоненту присоединить клонированные элементы к документу DOM в соответствующем месте. CloneAttachFn вызывается как: cloneAttachFn (clonedElement, scope) – lostintranslation

+0

Из углового документа: «clonedElement - это клон исходного элемента, переданного в компилятор» Так что я полагаю, что этот элемент все еще не скомпилирован и не связан. – devmao

+0

По какой-то причине это больше не работает в угловом 1.2, контроллер не может получить доступ к getContent(). Есть идеи? –

1

Попробуйте это:

var directiveTag = $(document.createElement("search-results-map-marker-popup")); 
var compiledDirective = $compile(directiveTag)(popupScope); 

newMarker.bindPopup(compiledDirective[0]); 
2

Вы можете использовать новую поддержку для углового содержания в угловой листовке-директиве:

var html = '<br><span ng-class="thumbsUpClass(item)" ' + 
    'ng-click="addChoice(item,set)"><span class="popup-container"><span ' + 
    'class="icon-stack thumbs-up-stack"><i class="icon-sign-blank ' + 
    'icon-stack-base"></i><i class="icon-thumbs-up"></i></span></span></span>'; 

... 

$scope.markers.push({ lat: ..., 
         lng: ..., 
         message: html, 
         getMessageScope: function() { return $scope; },   
}); 
+0

Отличный улов! Интересно, почему на сайте нет примера ... Тем не менее, 'compileMessage' также может быть установлен в' true' в объекте, который вы передаете методу 'push' в последней версии плагина. Кроме того, это работает только для маркеров, а не для путей и т. Д. – sibbl