I'm attempting to build an extended version of the Angular UI Bootstrap tooltip although it's really more of a translation of the $modal provider into a tooltip provider
my intent is to create a tooltip that will have its own controller - in much the same way as can be done with the
$modal
provider
I tried creating a tooltipExtended
directive like so:
.directive('tooltipExtended', [ 'tooltipStack', '$timeout', function (tooltipStack, $timeout) { return { restrict: 'EA', scope: { index: '@', animate: '=', placement: '@' }, replace: true, transclude: true, templateUrl: function (tElement, tAttrs) { return tAttrs.templateUrl || 'template/tooltip/extended.html'; }, link: function (scope, element, attrs) { //....etc.... } }; } ]); .directive('tooltipTransclude', function () { return { link: function ($scope, $element, $attrs, controller, $transclude) { $transclude($scope.$parent, function (clone) { $element.empty(); $element.append(clone); }); } }; }); angular.module("template/tooltip/extended.html", []).run(["$templateCache", function ($templateCache) { $templateCache.put("template/tooltip/extended.html", "<div tabindex=\"-1\" role=\"tooltip\" class=\"tooltip {{placement}}\" ng-class=\"{in: animate}\" ng-style=\"{'z-index': 1050 + index*10, display: 'block'}\" ng-click=\"close($event)\">\n" + " <div class=\"tooltip\"><div class=\"tooltip-content\" tooltip-transclude></div></div>\n" + "</div>"); }]);
and then using the tooltipStack
(again, basically mirroring the $modalStack
, just without a backdrop
) - I do the following in the tooltipStack.open
function:
// ... var body = $document.find('body').eq(0); var angularDomEl = angular.element('<div tooltip-extended></div>'); var index = openedTooltips.length() - 1; angularDomEl.attr({ 'template-url': tooltip.tooltipTemplateUrl, 'tooltip-class': tooltip.tooltipClass, 'index': index, 'placement': tooltip.placement, 'animate': 'animate' }).html(tooltip.content); var tooltipDomEl = $compile(angularDomEl)(tooltip.scope); // ...
when I do this, it doesn't seem as though the controller is binding to the tooltip
if I change this to use the existing Angular UI Bootstrap tooltip
directive (which calls into the $tooltip
provider) like so:
var angularDomEl = angular.element('<div tooltip></div>');
everything suddenly works fine, but looking through the compile function for the $tooltip provider, I don't understand what makes this difference - the only code that executes is basically the construction logic for the $tooltip
provider's link
function that's returned by the $get
in case you're curious - to get the tooltip position, this extension relies on sending the angular.element($event.target)
from whatever event is used to trigger the tooltip
any suggestions?