问题扩展angular-ui-bootstrap工具提示

时间:2015-04-15 23:26:28

标签: javascript angularjs-directive angular-ui angular-ui-bootstrap angularjs-provider

我尝试构建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)

有什么建议吗?

0 个答案:

没有答案