¿Puedo usar $ compile en un servicio angular directamente en una templateUrl en lugar de en HTML sin formato o un elemento angular sin formato?

Dado el siguiente servicio destinado a crear un elemento de "diálogo" (es decir, un modal):

app.service('dialog', ['$document', '$compile', '$rootScope',
    function($document, $compile, $rootScope) {

        var body = $document.find('body');
        var scope = $rootScope.$new();

        this.createDialog = function() {
            var dialogElem = angular.element('<div ng-include="\'/dialog.html\'"></div>');
            $compile(dialogElem)(scope);
            body.append(dialogElem);
        };

    }
]);

que se puede utilizar en un controlador así:

$scope.someFunction = function() {
    dialog.createDialog();
};

¿Hay alguna manera que pueda usar?$compile o algo más para no tener HTML en mi servicio? Realmente preferiría invocar una directiva, de modo que ejecutarcreateDialog() Inyecta inmediatamente una directiva en mi DOM y, por lo tanto, la directiva es responsable de vincular un nuevo controlador y una plantilla. Si hago esto de la manera equivocada, estoy totalmente abierto a ideas constructivas.

Respuestas a la pregunta(2)

Su respuesta a la pregunta