Dans notre projet actuel au travail, nous avions un iFrame invisible et je devais fournir l'url du fichier à l'iFrame pour obtenir une boîte de dialogue de téléchargement. Lors du clic sur le bouton, le contrôleur génère l'url dynamique et déclenche un événement $scope dans lequel un objet personnalisé de type directive
J'ai écrit, c'est la liste. La directive ajoutera une iFrame au corps s'il n'existe pas déjà et lui attribuera l'attribut url.
EDIT : Ajout d'une directive
appModule.directive('fileDownload', function ($compile) {
var fd = {
restrict: 'A',
link: function (scope, iElement, iAttrs) {
scope.$on("downloadFile", function (e, url) {
var iFrame = iElement.find("iframe");
if (!(iFrame && iFrame.length > 0)) {
iFrame = $("<iframe style='position:fixed;display:none;top:-1px;left:-1px;'/>");
iElement.append(iFrame);
}
iFrame.attr("src", url);
});
}
};
return fd;
});
Cette directive répond à un événement du contrôleur appelé downloadFile
donc dans votre contrôleur vous faites
$scope.$broadcast("downloadFile", url);
1 votes
Quels sont les navigateurs que vous prenez en charge ? Cela peut être résolu de manière créative (comme les data-uris, les blobs, l'API de l'historique du navigateur, etc) mais cela dépend vraiment.
0 votes
Économiseur de fichiers angulaire est un bon polyfill pour les navigateurs moins modernes.