Angularjs rendering directive with transclude on body

207 Views Asked by At

I want to create a tooltip attribute directive with transclude, and render it on the body..

for example:

<div tooltip>
    <transcluded-content>content</transcluded-content>
</div>

module.directive('tooltip', function () {
    return {
            restrict: 'A',
            templateUrl: 'tooltip.html',
            transclude: {
                'transcluded-content': 'transcluded-content'
            }
        };
    });

I want to render the template on the body instead of the div...

1

There are 1 best solutions below

3
Protozoid On BEST ANSWER

In order to have the element on the body, you could try moving it in the link function. How about this?

module.directive('tooltip', function () {
    return {
            restrict: 'A',
            templateUrl: 'tooltip.html',
            transclude: {
                'transcluded-content': 'transcluded-content'
            },
            link: function (scope, element) {
                angular.element('body').append(element);
            }
        };
    });

There are more complex approaches, but they'll require $compile-ing and other messy techniques.