Просто, чтобы добавить в базу знаний здесь. Вот угловой способ, если кому-то понадобится. Я основывал свое решение на Mark Coleman's PopOver tutorial и, конечно же, что внес Nate Barbettini.
У меня было вложенное ng-repeat над элементами в элементах, поэтому мне нужно иметь заголовок для моего всплывающего окна, основанного на массиве, хранящемся в области, а содержимое всплывающего окна - из другого массива хранится в массиве области.
Я добавил ng-attr-title
в мой HTML элемент, например, так:
<div pop-over items='week.items' ng-attr-title="{{'Week number:'+ week.week}}"> Total sales this week : {{week.sales}}</div>
Затем в моей директиве, я следовал в основном то, что сделал Марк Колман.
angular.module('vegadirectives', [])
.directive('popOver', function ($compile, $templateCache) {
var itemsTemplate = "<ul class='popper'><li ng-repeat='thing in items track by $index'>";
itemsTemplate+=" <i class='fa fa-square' ng-class=";
itemsTemplate+="{purple:thing.color==='purple','orange':thing.color==='orange','white':thing.color==='white','pink':thing.color==='pink','red':thing.color==='red','green':thing.color==='green','yellow':thing.color==='yellow'}";
itemsTemplate+="></i> {{thing.model}} - {{thing.qty}}</li></ul>";
var getTemplate = function() {
var template=itemsTemplate;
return template;
}
return {
restrict: "A",
transclude: true,
template: "<span ng-transclude></span>",
link: function (scope, element, attrs) {
var popOverContent;
if (scope.items) {
var html = getTemplate();
popOverContent = $compile(html)(scope);
var options = {
trigger:'click',
content: popOverContent,
placement: "right",
html: true,
title:scope.title
};
if (scope.$last) {
}
$(element).popover(options);
}
},
scope: {
items: '=',
title:'@'
}
};
});
Объяснение:
Чтобы пополнить мой поповер со списком элементов, с некоторой фантазии цветной квадрат, чтобы указать различные типы элементов, я создал кусок HTML кода. Этот кусок с именем itemsTemplate будет использоваться компиляцией $, чтобы создать popover-контент с областью. Я думаю, что использование $ compile (htmlstring) (scope).
Далее идет стандартный материал для настроек параметров для popover. Для интерполяции области с названием я указал опцию title:
на scope.title
. Затем, в варианте scope:
вниз в конце, два элемента охвата указаны с '='
и '@'
.
Таким образом, относится title:scope.title
или связывается с scope: {items:'=', title:'@' }
и title:'@'
это атрибуты заголовка в HTML, который является ng-attrs-title={{week.week}}
, где неделя от внешней нг-повторить цикл.
Надеюсь, что это поможет.
Здравствуйте. Я ценю, что вы включили скрипку, но неясно, в чем проблема. Можете ли вы улучшить свою скрипку, чтобы она говорила: «Вот что я хотел бы сделать: X. Как вы видите, Y происходит». –
Жаль, что я не был чист. Я обновил Fiddle. – ExceptionLimeCat
Я предлагаю [ui-bootstrap] (http://angular-ui.github.io/bootstrap/#/popover) здесь, но см. Мой ответ для решения с использованием текущего плагина. –