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 select下拉框操作常用方法
Nov 09 Javascript
jquery防止重复执行动画避免页面混乱
Apr 22 Javascript
jQuery中noconflict函数的实现原理分解
Feb 03 Javascript
javascript实现checkBox的全选,反选与赋值
Mar 12 Javascript
jQuery序列化表单成对象的简单实现
Nov 29 Javascript
js实现音乐播放控制条
Sep 09 Javascript
浅谈JS函数节流防抖
Oct 18 Javascript
解决Vue打包之后文件路径出错的问题
Mar 06 Javascript
Angular使用动态加载组件方法实现Dialog的示例
May 11 Javascript
Js Snowflake(雪花算法)生成随机ID的实现方法
Aug 26 Javascript
关于vue-cli3打包代码后白屏的解决方案
Sep 02 Javascript
解决iView Table组件宽度只变大不变小的问题
Nov 13 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代码
2006/12/06 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
JQuery之focus函数使用介绍
2013/08/20 Javascript
用js的for循环获取radio选中的值
2013/10/21 Javascript
关于js数组去重的问题小结
2014/01/24 Javascript
浅谈$(document)和$(window)的区别
2015/07/15 Javascript
ES6中非常实用的新特性介绍
2016/03/10 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
2016/04/20 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
浅谈javascript中的事件冒泡和事件捕获
2016/12/28 Javascript
nodejs简单读写excel内容的方法示例
2018/03/16 NodeJs
JS选取DOM元素常见操作方法实例分析
2018/12/10 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
2019/04/08 Javascript
vue组件间的参数传递实例详解
2019/04/26 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
2020/04/26 Javascript
[03:10]2014DOTA2 TI马来劲旅Titan首战告捷目标只是8强
2014/07/10 DOTA
Python多线程实例教程
2014/09/06 Python
Python高斯消除矩阵
2019/01/02 Python
python实现公司年会抽奖程序
2019/01/22 Python
Python2与Python3的区别点整理
2019/12/12 Python
python从内存地址上加载python对象过程详解
2020/01/08 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
暇步士官网:Hush Puppies
2016/09/22 全球购物
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
中专生职业生涯规划书范文
2014/01/10 职场文书
学生自我评语大全
2014/04/18 职场文书
松材线虫病防治方案
2014/06/15 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
2014年便民服务中心工作总结
2014/12/20 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
怎样写观后感
2015/06/19 职场文书
python某漫画app逆向
2021/03/31 Python
python实现语音常用度量方法的代码详解
2021/05/25 Python
OpenCV-Python实现人脸磨皮算法
2021/06/07 Python