`

angular2-download

阅读更多
import { Injectable } from '@angular/core';

function invorkLoadProxy(ifr, cache, callBackFn, resolve){
    let fn = function(){
        if (ifr.$$eventFn){
            ifr.removeEventListener('load', ifr.$$eventFn);
        }
        let r = cache || [];
        r.forEach((r)=>{
            document.body.removeChild(r);
        })
        callBackFn();
        resolve(true);
    }
    ifr.$$eventFn = fn;
    ifr.addEventListener('load', fn);
}

/**
* 下载服务
* @auther xiufu.wang
*/
@Injectable()
export class MbDownloadService {
   
    constructor() {}

    post(url: string, params?: {[name: string]: Array<string | number>| string | number}){
        return new Promise((resolve, reject)=>{
            let cache = [];
            params = params || {};
            let ifr = this.createHtmlDocumentAndAppendBody('iframe', {name: 'ng2downloadIframe', src: 'about:blank'}, cache);
            ifr.style.display = 'none';
            invorkLoadProxy(ifr, cache, ()=>{this.onDownLoad();}, resolve);

            let formCtrl:any = this.createHtmlDocumentAndAppendBody('form', {target: 'ng2downloadIframe', action: url, method: 'POST'}, false);
           
            for (var key in params){
                if (params[key] !== undefined && params.hasOwnProperty(key)){
                    let v = params[key];
                    if (Array.isArray(v)){
                        v = v.join(',');
                    }
                    formCtrl.appendChild(this.createHtmlDocument('input', {type: 'hidden', name: key, value: v}, false));
                }
            }
           
            formCtrl.submit();
            document.body.removeChild(formCtrl);
        });
    }

    get(url: string, params?: {[name: string]: Array<string | number>| string | number}){
        return new Promise((resolve, reject)=>{
            let cache = [];
            params = params || {};
            let ifr = this.createHtmlDocumentAndAppendBody('iframe', {name: 'ng2downloadIframe', src: 'about:blank'}, cache);
            ifr.style.display = 'none';
            invorkLoadProxy(ifr, cache, ()=>{this.onDownLoad();}, resolve);

            let urlParams = '_doc='+ new Date().getTime();
            for (let key in params){
                if (params.hasOwnProperty(key) && params[key]){
                    let v = params[key];
                    if (Array.isArray(v)){
                        v = v.join(',');
                    }
                    urlParams = urlParams + '&' + key + '=' + v;
                }
            }
           
            let p = url.indexOf('?') > 0 ? ('&' + urlParams) : ('?' + urlParams)
            ifr.setAttribute('src', url + p);
        });
     }

    private onDownLoad(){}

    private createHtmlDocument(tagName, context, cache){
        context = context || {};
        let el = document.createElement(tagName);
        for (let key in context){
            if (context.hasOwnProperty(key) && context[key]){
                el.setAttribute(key, context[key]);
            }
        }
        if (cache){
            cache.push(el);
        }
        return el;
    }

    private createHtmlDocumentAndAppendBody(tagName, context, cache){
        let el = this.createHtmlDocument(tagName, context, cache);
        document.body.appendChild(el);
        return el;
    }

    private bindEventListener(el, type, func){
        el.removeEventListener(type, func);
        el.addEventListener(type, func);
    }
}
分享到:
评论

相关推荐

    ng-book2-angular-6-r68

    《ng-book2-angular-6-r68》是深入、全面且与时俱进的Angular 6专著,旨在帮助读者成为Angular 6的专家。这本书涵盖了Angular框架的各个方面,从基础概念到高级特性和最佳实践,旨在让读者对Angular 6有深入的理解。...

    Angular-angular2-image-gallery.zip

    Angular-angular2-image-gallery.zip,使用Angular 8 、node.js和GraphicsMagAngular 2图像库构建的图像库,Angularjs于2016年发布,是Angularjs的重写版。它专注于良好的移动开发、模块化和改进的依赖注入。angular的...

    Angular-angular-starter.zip

    Angular-angular-starter.zip,使用Typescript(更新为4.4.3)的Gulp角起动器,Angularjs于2016年发布,是Angularjs的重写版。它专注于良好的移动开发、模块化和改进的依赖注入。angular的设计目的是全面解决开发人员...

    ng-book2-angular6-r68PDF文件(英文)

    《ng-book2-angular6-r68》是一本关于Angular6的完整指南书籍,由Nate Murray, Felipe Coury, Ari Lerner 和 Carlos Taborda编写,全书版权归属于Fullstack.io。这本书发布于2018年,而提及的“r68”版本指的是该书...

    前端大教程 包括 ajax angular es5-6-7 html5+css3 node 等

    包括 .idea ajax angular es5-6-7 html+css html5+css3 javaScript modular node react vue zepro 前端优化以及项目构建等教程

    ng-download:Angular JS指令用于触发类似异步文件的下载

    angular . module ( 'app' , [ 'ngDownload' ] ) ; 在您的html中实现指令: &lt; button ng-download =" {{urlToPublicFile}} " params =" optionalParameters " &gt; Download &lt;/ button &gt; ...

    Angular2环境搭建

    angular2工程搭建 一、编译和运行环境搭建 1、node.js和npm安装 a、下载地址:https://nodejs.org/en/download/ b、通过node -v 和 npm -v检查是否正确安装 c、下载工程: 略 d、进入工程目录 cd ...

    揭秘angular2

    网络搜集资源,想了解angular2发展,及入门学习的可以作为不错的读物

    angular-1.6.0.zip

    2. **依赖注入**:AngularJS的另一个重要特性是依赖注入(Dependency Injection),1.6.0版依然支持这个特性。它简化了对象之间的关系,使得代码更易于测试和维护。例如,你可以这样注入服务: ```javascript ...

    [angular2权威教程英文版]ng-book.2.Angular.4.r60.2017.4.pdf

    [angular2权威教程英文版]ng-book.2.Angular.4.r60.2017.4.pdf 随书代码地址:http://download.csdn.net/detail/xinconan1992/9853043

    Angular-and-Node.js---The-MEAN-Stack-Guide:Angular和Node.js-MEAN堆栈指南,由Packt发行

    关于视频课程本课程将带您进入一个旅程,在该旅程中,您将学习如何使用Angular(以前称为Angular 2,现在只是Angular)以及Node.js,Express和MongoDB创建现代,可伸缩和高速的Web应用程序。 Angular 1和Node.js以及...

    angular-truffle-starter-dapp-master.zip

    Angular CLI + Truffle Starter Dapp;在以太坊区块链上编写,编译和部署智能合约

    Pro Angular2,第二版,英文原版

    ### Pro Angular2, 第二版 英文原版 #### 书籍概述 《Pro Angular》第二版是一本专为希望深入了解Angular框架的开发者们编写的高级指南。本书由经验丰富的技术作者Adam Freeman撰写,旨在帮助读者掌握如何在现代Web...

    angular-compile::NG_button:Angular动态编译-将字符串转换为Angular组件

    安装NodeJ: ://nodejs.org/en/download/package-manager/ 建立在Angular上 11.2.4 描述 用例 将标准字符串动态编译为功能齐全的Angular组件。 支持导入,导出和标准上下文。 安装 npm install --save p3x-angular-...

    angular-ssr:Angular 11示例服务器端渲染SSR

    Angular 11示例服务器端渲染 一个具有和的Angular入门工具包 它是一个回购系列的一部分,该系列旨在使用Angular创建Web应用程序。 Web应用程序实时演示 快速开始 # choose a repo # download the example or clone ...

    angular-bind-hash:在加载的页面中将散列绑定到元素的值并将元素的值绑定到散列

    download the file https://raw.githubusercontent.com/huyinghuan/angular-bind-hash/master/angular-bind-hash.js 入门 包括 angularjs 和 angular-bind-hash.js 示例: &lt; script src =" lib/angular.min.js...

    angular-pwa:Angular 11示例渐进式Web应用程序(PWA)

    Angular 11示例PWA 具有和的Angular入门工具包它是一个回购系列的一部分,该系列旨在使用Angular创建渐进式Web应用程序Web应用程序实时演示快速开始# choose a repo# download the example or clone the repo from ...

    [权威的angular 4教程(英文完整版)] ng-book.2.Angular.4.r60.2017.4.pdf

    Angular 4相比于Angular 2和3,带来了性能上的显著提升,减少了一些API的复杂性,并优化了编译器。这个教程会涵盖以下几个核心知识点: 1. **Angular基础知识**:首先,你将学习到Angular的基本概念,包括模块...

    Angular 2环境搭建到快速上手

    ### Angular 2 环境搭建到快速上手 #### 一、Angular 2 开发环境搭建步骤 ##### 第一步:安装 Node.js 1. **下载安装**:访问 [http://nodejs.org/download/](http://nodejs.org/download/) 下载 Windows 版本的 ...

    angular-transferstate:Angular 11示例SSR和传输状态

    Angular 11示例传输状态一个具有和的Angular入门工具包它是一个回购系列的一部分,该系列旨在使用Angular创建渐进式Web应用程序Web应用程序实时演示快速开始# choose a repo# download the example or clone the ...

Global site tag (gtag.js) - Google Analytics