AngularJS基于http请求实现下载php生成的excel文件功能示例


Posted in Javascript onJanuary 23, 2018

本文实例讲述了AngularJS基于http请求实现下载php生成的excel文件功能。分享给大家供大家参考,具体如下:

使用PHPExcel插件的同学们都知道,导出excel是直接将生成内容修改content-type来将内容作为文件下载的,这时候需要页面上有一个url,通过点击来下载。

那么问题来了,如果在生成excel时有请求参数,只能通过js的http请求,这时候怎么下载呢?

研究了一下,有以下几种方式:

1. angularjs创建a标签模拟下载

// 创建a标签模拟下载
function exportExcel(params, filename) {
  return $http({
    url: '/api/exportExcel',
    method: "POST",
    headers: {
      'Content-type': 'application/json'
    },
    params: params,
    responseType: 'arraybuffer'
  }).success(function (data) {
    var blob = new Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"});
    var objectUrl = URL.createObjectURL(blob);
    var a = document.createElement('a');
    document.body.appendChild(a);
    a.setAttribute('style', 'display:none');
    a.setAttribute('href', objectUrl);
    a.setAttribute('download', filename);
    a.click();
    URL.revokeObjectURL(objectUrl);
  });
}

这个方式中要注意,如果传输的是xls,也就是excel5文件,type要设置为application/vnd.ms-excelapplication/x-excel

2. js将请求参数生成url,创建a标签

// 生成下载url
$scope.data.down_url = "../c_potential/get_excel?end_time="+$scope.end_date+"&liable="+liable+"&nickname="+$scope.data.nickname+"&province="+$scope.data.province_cur+"&start_time="+$scope.start_date;

然后将url绑定到某个a标签中,这种方式适合参数较少的情况,而且数据不会经过二次处理,不易发生error,唯一的缺点是需要处理两次,可以设置两个按钮,一个为生成,将参数写入url中,第二个按钮为下载excel。虽然用户是两次操作,但实际上只发生了一次http请求,不会影响性能。

3. 先生成后下载

第三种方式类似第二种,首先生成excel文件,储存到服务器,然后下载。涉及到磁盘IO,所以性能比较低,不推荐这种方式,只是作为一个方法记录下来。

angularjs模拟下载的方式最方便,但有可能出现error,第二种方式最保险。

希望本文所述对大家AngularJS程序设计有所帮助。

Javascript 相关文章推荐
线路分流自动智能跳转代码,自动选择最快镜像网站(js)
Oct 31 Javascript
Node.js 应用跑得更快 10 个技巧
Apr 03 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
Aug 10 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
Nov 16 Javascript
AngularJs每天学习之总体介绍
Aug 07 Javascript
Angular实现下载安装包的功能代码分享
Sep 05 Javascript
微信小程序日期时间选择器使用方法
Feb 01 Javascript
详解适配器在JavaScript中的体现
Sep 28 Javascript
Vue 动态组件components和v-once指令的实现
Aug 30 Javascript
Vue防止白屏添加首屏动画的实例
Oct 31 Javascript
vue 遮罩层阻止默认滚动事件操作
Jul 28 Javascript
Vue中computed及watch区别实例解析
Aug 01 Javascript
简述vue中的config配置
Jan 23 #Javascript
JS实现多物体运动的方法详解
Jan 23 #Javascript
JS运动改变单物体透明度的方法分析
Jan 23 #Javascript
JS实现基于拖拽改变物体大小的方法
Jan 23 #Javascript
基于vue cli重构多页面脚手架过程详解
Jan 23 #Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
Jan 23 #Javascript
实时监控input框,实现输入框与下拉框联动的实例
Jan 23 #Javascript
You might like
PHP file_get_contents 函数超时的几种解决方法
2009/07/30 PHP
网页游戏开发入门教程二(游戏模式+系统)
2009/11/02 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
浅析php过滤html字符串,防止SQL注入的方法
2013/07/02 PHP
分享一则PHP定义函数代码
2015/02/26 PHP
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
javascript中call,apply,bind的用法对比分析
2015/02/12 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
2016/01/18 Javascript
JavaScript基础教程——入门必看篇
2016/05/20 Javascript
清空元素html("") innerHTML="" 与 empty()的区别和应用(推荐)
2017/08/14 Javascript
React Native使用百度Echarts显示图表的示例代码
2017/11/07 Javascript
Vue的轮播图组件实现方法
2018/03/03 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
2018/05/17 Javascript
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
js实现黑白div块画空心的图形
2018/12/13 Javascript
利用angular自动编译andriod APK的绕坑经历分享
2019/03/08 Javascript
Element Dropdown下拉菜单的使用方法
2020/07/26 Javascript
[00:10]神之谴戒
2019/03/06 DOTA
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
2018/09/17 Python
详解Python with/as使用说明
2018/12/13 Python
python threading和multiprocessing模块基本用法实例分析
2019/07/25 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
Marlies Dekkers内衣荷兰官方网店:荷兰奢侈内衣品牌
2020/03/27 全球购物
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
新闻系毕业生推荐信
2013/11/16 职场文书
电脑租赁公司创业计划书
2014/01/08 职场文书
校园安全检查制度
2014/02/03 职场文书
做一个有道德的人活动方案
2014/08/25 职场文书
个人整改措施落实情况汇报
2014/10/29 职场文书
2015年五一劳动节活动总结
2015/02/09 职场文书
公司清洁工岗位职责
2015/04/15 职场文书
go语言求任意类型切片的长度操作
2021/04/26 Golang