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》是深入、全面且与时俱进的Angular 6专著,旨在帮助读者成为Angular 6的专家。这本书涵盖了Angular框架的各个方面,从基础概念到高级特性和最佳实践,旨在让读者对Angular 6有深入的理解。...
Angular-angular2-image-gallery.zip,使用Angular 8 、node.js和GraphicsMagAngular 2图像库构建的图像库,Angularjs于2016年发布,是Angularjs的重写版。它专注于良好的移动开发、模块化和改进的依赖注入。angular的...
Angular-angular-starter.zip,使用Typescript(更新为4.4.3)的Gulp角起动器,Angularjs于2016年发布,是Angularjs的重写版。它专注于良好的移动开发、模块化和改进的依赖注入。angular的设计目的是全面解决开发人员...
《ng-book2-angular6-r68》是一本关于Angular6的完整指南书籍,由Nate Murray, Felipe Coury, Ari Lerner 和 Carlos Taborda编写,全书版权归属于Fullstack.io。这本书发布于2018年,而提及的“r68”版本指的是该书...
包括 .idea ajax angular es5-6-7 html+css html5+css3 javaScript modular node react vue zepro 前端优化以及项目构建等教程
angular . module ( 'app' , [ 'ngDownload' ] ) ; 在您的html中实现指令: < button ng-download =" {{urlToPublicFile}} " params =" optionalParameters " > Download </ button > ...
angular2工程搭建 一、编译和运行环境搭建 1、node.js和npm安装 a、下载地址:https://nodejs.org/en/download/ b、通过node -v 和 npm -v检查是否正确安装 c、下载工程: 略 d、进入工程目录 cd ...
网络搜集资源,想了解angular2发展,及入门学习的可以作为不错的读物
2. **依赖注入**:AngularJS的另一个重要特性是依赖注入(Dependency Injection),1.6.0版依然支持这个特性。它简化了对象之间的关系,使得代码更易于测试和维护。例如,你可以这样注入服务: ```javascript ...
[angular2权威教程英文版]ng-book.2.Angular.4.r60.2017.4.pdf 随书代码地址:http://download.csdn.net/detail/xinconan1992/9853043
关于视频课程本课程将带您进入一个旅程,在该旅程中,您将学习如何使用Angular(以前称为Angular 2,现在只是Angular)以及Node.js,Express和MongoDB创建现代,可伸缩和高速的Web应用程序。 Angular 1和Node.js以及...
Angular CLI + Truffle Starter Dapp;在以太坊区块链上编写,编译和部署智能合约
### Pro Angular2, 第二版 英文原版 #### 书籍概述 《Pro Angular》第二版是一本专为希望深入了解Angular框架的开发者们编写的高级指南。本书由经验丰富的技术作者Adam Freeman撰写,旨在帮助读者掌握如何在现代Web...
安装NodeJ: ://nodejs.org/en/download/package-manager/ 建立在Angular上 11.2.4 描述 用例 将标准字符串动态编译为功能齐全的Angular组件。 支持导入,导出和标准上下文。 安装 npm install --save p3x-angular-...
Angular 11示例服务器端渲染 一个具有和的Angular入门工具包 它是一个回购系列的一部分,该系列旨在使用Angular创建Web应用程序。 Web应用程序实时演示 快速开始 # choose a repo # download the example or clone ...
download the file https://raw.githubusercontent.com/huyinghuan/angular-bind-hash/master/angular-bind-hash.js 入门 包括 angularjs 和 angular-bind-hash.js 示例: < script src =" lib/angular.min.js...
Angular 11示例PWA 具有和的Angular入门工具包它是一个回购系列的一部分,该系列旨在使用Angular创建渐进式Web应用程序Web应用程序实时演示快速开始# choose a repo# download the example or clone the repo from ...
Angular 4相比于Angular 2和3,带来了性能上的显著提升,减少了一些API的复杂性,并优化了编译器。这个教程会涵盖以下几个核心知识点: 1. **Angular基础知识**:首先,你将学习到Angular的基本概念,包括模块...
### Angular 2 环境搭建到快速上手 #### 一、Angular 2 开发环境搭建步骤 ##### 第一步:安装 Node.js 1. **下载安装**:访问 [http://nodejs.org/download/](http://nodejs.org/download/) 下载 Windows 版本的 ...
Angular 11示例传输状态一个具有和的Angular入门工具包它是一个回购系列的一部分,该系列旨在使用Angular创建渐进式Web应用程序Web应用程序实时演示快速开始# choose a repo# download the example or clone the ...