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 相关文章推荐
jquery 获取自定义属性(attr和prop)的实现代码
Jun 27 Javascript
Three.js源码阅读笔记(Object3D类)
Dec 27 Javascript
js实现对table动态添加、删除和更新的方法
Feb 10 Javascript
一看就懂:jsonp详解
Jun 01 Javascript
深入探讨javascript函数式编程
Oct 11 Javascript
Node.js+Express配置入门教程
May 19 Javascript
JS判断form内所有表单是否为空的简单实例
Sep 09 Javascript
jQuery UI插件实现百度提词器效果
Nov 21 Javascript
vue2项目使用sass的示例代码
Jun 28 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
Oct 09 Javascript
layui table 表格上添加日期控件的两种方法
Sep 28 Javascript
Vue-cli4 配置 element-ui 按需引入操作
Sep 11 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在Web开发领域的优势
2006/10/09 PHP
PHP+DBM的同学录程序(5)
2006/10/09 PHP
解析php5配置使用pdo
2013/07/03 PHP
php合并js请求的例子
2013/11/01 PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
2017/01/20 PHP
针对PHP开发安全问题的相关总结
2019/03/22 PHP
Zero Clipboard js+swf实现的复制功能使用方法
2010/03/07 Javascript
table对象中的insertRow与deleteRow使用示例
2014/01/26 Javascript
JavaScript实现将文本框的值插入指定位置的方法
2015/08/13 Javascript
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
js省市联动效果完整实例代码
2015/12/09 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
jquery checkbox的相关操作总结
2016/10/17 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
2016/10/18 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
2017/02/21 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
Angular2学习笔记之数据绑定的示例代码
2018/01/03 Javascript
微信小程序模版渲染详解
2018/01/26 Javascript
vue中touch和click共存的解决方式
2020/07/28 Javascript
理解Python中的With语句
2015/02/02 Python
Django接受前端数据的几种方法总结
2016/11/04 Python
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
Django 忘记管理员或忘记管理员密码 重设登录密码的方法
2018/05/30 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
2019/01/04 Python
python匿名函数用法实例分析
2019/08/03 Python
tensorflow tf.train.batch之数据批量读取方式
2020/01/20 Python
python如何使用腾讯云发送短信
2020/09/17 Python
python实现经纬度采样的示例代码
2020/12/10 Python
Jupyter Notebook 远程访问配置详解
2021/01/11 Python
CSS3 3D旋转rotate效果实例介绍
2016/05/03 HTML / CSS
浅谈css3新单位vw、vh、vmin、vmax的使用详解
2017/12/01 HTML / CSS
美国基督教约会网站:ChristianCafe.com
2020/02/04 全球购物
视光学专业毕业生推荐信
2013/10/28 职场文书
涨工资申请书应该怎么写?
2019/07/08 职场文书
Nginx 过滤静态资源文件的访问日志的实现
2021/03/31 Servers
JavaScript中MutationObServer监听DOM元素详情
2021/11/27 Javascript