Posso usar $ compile em um serviço Angular diretamente em um templateUrl em vez de em HTML bruto ou em um angular.element bruto?

Dado o serviço a seguir, com o objetivo de criar um elemento de "diálogo" (ou seja, um 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 pode ser utilizado em um controlador como este:

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

Existe uma maneira que eu possa usar$compile ou qualquer outra coisa para não ter HTML no meu serviço? Eu realmente preferiria invocar uma diretiva, para que corrercreateDialog() injeta imediatamente uma diretiva no meu DOM e, portanto, a diretiva é responsável por vincular um novo controlador e modelo. Se eu estou fazendo isso da maneira errada, estou totalmente aberto a idéias construtivas.

questionAnswers(2)

yourAnswerToTheQuestion