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.