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 相关文章推荐
JavaScript高级程序设计 客户端存储学习笔记
Sep 10 Javascript
jquery入门—访问DOM对象方法
Jan 07 Javascript
javascript实现多级联动下拉菜单的方法
Feb 06 Javascript
jquery实现表格本地排序的方法
Mar 11 Javascript
基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码
May 30 Javascript
Bootstrap基本样式学习笔记之表格(2)
Dec 07 Javascript
原生js编写焦点图效果
Dec 08 Javascript
js实现移动端编辑添加地址【模仿京东】
Apr 28 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
Aug 17 Javascript
Vue 中可以定义组件模版的几种方式
Aug 06 Javascript
原生javascript实现类似vue的数据绑定功能示例【观察者模式】
Feb 24 Javascript
TypeScript中条件类型精读与实践记录
Oct 05 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
Windows下的PHP5.0详解
2006/11/18 PHP
PHP的构造方法,析构方法和this关键字详细介绍
2013/10/22 PHP
php使用smtp发送支持附件的邮件示例
2014/04/13 PHP
smarty模板引擎之内建函数用法
2015/03/30 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
PHP中利用sleep函数实现定时执行功能实现代码
2016/08/25 PHP
Ext GridPanel加载完数据后进行操作示例代码
2014/06/17 Javascript
Nodejs极简入门教程(二):定时器
2014/10/25 NodeJs
浅谈JavaScript Math和Number对象
2015/01/26 Javascript
jQuery实现折线图的方法
2015/02/28 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
2017/09/04 Javascript
3种vue路由传参的基本模式
2018/02/22 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
js实现轮播图效果 z-index实现轮播图
2020/01/17 Javascript
HTML元素拖拽功能实现的完整实例
2020/12/04 Javascript
JavaScript中clientWidth,offsetWidth,scrollWidth的区别
2021/01/25 Javascript
python重试装饰器示例
2014/02/11 Python
python 计算两个日期相差多少个月实例代码
2017/05/24 Python
Python使用cx_Oracle调用Oracle存储过程的方法示例
2017/10/07 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
python将list转为matrix的方法
2018/12/12 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
基于OpenCV的路面质量检测的实现
2020/11/04 Python
Cotton On美国网站:澳洲时装连锁品牌
2016/10/25 全球购物
香港演唱会订票网站:StubHub香港
2019/10/10 全球购物
文秘专业毕业生就业推荐信
2013/11/08 职场文书
自我评价如何写好?
2014/01/05 职场文书
《逃家小兔》教学反思
2014/02/23 职场文书
《画风》教学反思
2014/04/16 职场文书
五一促销活动总结
2014/07/01 职场文书
社保代办委托书怎么写
2014/10/06 职场文书
2015年干部教育培训工作总结
2015/05/15 职场文书
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技