我尝试构建Angular UI Bootstrap tooltip的扩展版本,尽管它更像是将$modal提供程序翻译成工具提示提供程序
我的意图是创建一个具有自己的控制器的工具提示 - 与
的方式大致相同$modal
提供程序
我尝试创建一个tooltipExtended
指令,如下所示:
.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>");
}]);
然后使用tooltipStack
(再次,基本上镜像$modalStack
,只是没有backdrop
) - 我在tooltipStack.open
函数中执行以下操作:
// ...
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);
// ...
当我这样做时,它似乎并不像控制器绑定到工具提示
如果我将其更改为使用现有的Angular UI Bootstrap tooltip
指令(调用$tooltip
提供程序),如下所示:
var angularDomEl = angular.element('<div tooltip></div>');
一切都突然正常,但是查看$ tooltip提供程序的编译功能,我不明白是什么造成了这种差异 - 执行的唯一代码基本上是$tooltip
提供程序的构造逻辑#39; link
返回的$get
函数
如果您感到好奇 - 要获得工具提示位置,此扩展程序依赖于从用于触发工具提示的任何事件发送angular.element($event.target)
有什么建议吗?