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中的View-Model使用介绍
Aug 11 Javascript
jquery jqPlot API 中文使用教程(非常强大的图表工具)
Aug 15 Javascript
JavaScript中的正则表达式简明总结
Apr 04 Javascript
javasctipt如何显示几分钟前、几天前等
Apr 30 Javascript
浅析Node在构建超媒体API中的作用
Jul 30 Javascript
分享十五款 jQuery 社交网络分享插件
May 16 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
Aug 06 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
Dec 18 Javascript
移动端触屏幻灯片图片切换插件idangerous swiper.js
Apr 10 Javascript
Angular4 中常用的指令入门总结
Jun 12 Javascript
解决vue中修改export default中脚本报一大堆错的问题
Aug 27 Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
Sep 25 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
PHP4实际应用经验篇(2)
2006/10/09 PHP
PHP中图片等比缩放的实例
2013/03/24 PHP
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
经典的带阴影的可拖动的浮动层
2006/06/26 Javascript
javascript 获取图片颜色
2009/04/05 Javascript
JavaScript 异步调用框架 (Part 3 - 代码实现)
2009/08/04 Javascript
JS面向对象编程 for Cookie
2010/09/19 Javascript
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
2012/01/08 Javascript
在浏览器窗口上添加遮罩层的方法
2012/11/12 Javascript
javascript基础之查找元素的详细介绍(访问节点)
2013/07/05 Javascript
jQuery实现手机自定义弹出输入框
2016/06/13 Javascript
React Router基础使用
2017/01/17 Javascript
详解vue.js 开发环境搭建最简单攻略
2017/06/12 Javascript
bootstrap paginator分页前后台用法示例
2017/06/17 Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
2018/03/01 Javascript
[原创]jQuery实现合并/追加数组并去除重复项的方法
2018/04/11 jQuery
微信小程序实现简单跑马灯效果
2020/05/26 Javascript
深入解析koa之异步回调处理
2019/06/17 Javascript
js单线程的本质 Event Loop解析
2019/10/29 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
2020/07/17 Javascript
Vue开发中常见的套路和技巧总结
2020/11/24 Vue.js
JavaScript实现下拉列表
2021/01/20 Javascript
python TCP包注入方式
2020/05/05 Python
基于Python的Jenkins的二次开发操作
2020/05/12 Python
python跨文件使用全局变量的实现
2020/11/17 Python
HTML5 History API 实现无刷新跳转
2016/01/11 HTML / CSS
开办加工厂创业计划书
2014/01/03 职场文书
师范教师专业大学生职业生涯规划范文
2014/03/02 职场文书
1亿有多大教学反思
2014/05/01 职场文书
年度优秀员工获奖感言
2014/08/15 职场文书
终止劳动合同协议书
2014/10/05 职场文书
安全教育第一课观后感
2015/06/17 职场文书
大学学习委员竞选稿
2015/11/20 职场文书
CSS3中Animation实现简单的手指点击动画的示例
2021/07/15 HTML / CSS
Python极值整数的边界探讨分析
2021/09/15 Python