大佬教程收集整理的这篇文章主要介绍了Angular:从FileReader返回Observable / ES6 Promise,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
import { Injectable } from '@angular/core'; import * as XLSX from 'xLSX'; import * as XLS from 'xLSX'; @Injectable() export class ExcelReaderservice { constructor() { } importFromExcel(ev): JQueryPromise<any> { let deferred = $.Deferred(); let regex = /^([a-zA-Z0-9\s_\\.\-:])+(.xLSX|.xls)$/; let workbook; let excelInJSON; if (regex.test(ev.target.files[0].name.toString().toLowerCase())) { let xLSXflag = false; /*Flag for checking whether excel is .xls format or .xLSX format*/ if (ev.target.files[0].name.toString().toLowerCase().indexOf(".xLSX") > 0) { xLSXflag = true; } let fileReader = new FileReader(); fileReader.onload = (ev) => { let binary = ""; let bytes = new Uint8Array((<any>ev.target).result); let length = bytes.byteLength; for (let i = 0; i < length; i++) { binary += String.fromCharCode(bytes[i]); } /*Converts the excel data in to json*/ if (xLSXflag) { workbook = XLSX.read(binary,{ type: 'binary',cellDates: true,cellStyles: true }); // only first sheet excelInJSON = XLSX.utils.sheet_to_json(workbook.Sheets[workbook.SheetNames[0]]); deferred.resolve(excelInJSON); } else { workbook = XLs.read(binary,cellStyles: true }); excelInJSON = <{}[]>XLS.Utils.sheet_to_row_object_array(workbook.Sheets[workbook.SheetNames[0]]); deferred.resolve(excelInJSON); } } // init read if (xLSXflag) fileReader.readAsArrayBuffer((<any>ev.target).files[0]); else fileReader.readAsBinaryString((<any>ev.target).files[0]); } else { deferred.reject('Invalid file!'); } return deferred.promise(); } }
在消费者组件中
this.excelReaderservice.importFromExcel(ev).then((result) => { this.detailheadings = Object.keys(result[0]); this.detailData = result; })
如果有人帮助我,因为我是异步编程的新手,这将是很棒的.
import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/Observable'; import * as XLSX from 'xLSX'; @Injectable() export class ExcelReaderservice { constructor() { } importFromExcel(ev): Observable<any> { let workbook; let excelInJSON; const fileReader = new FileReader(); // init read fileReader.readAsArrayBuffer((<any>ev.target).files[0]); return Observable.create(observer => { // if success fileReader.onload = ev => { let binary = ""; let bytes = new Uint8Array((<any>ev.target).result); let length = bytes.byteLength; for (let i = 0; i < length; i++) { binary += String.fromCharCode(bytes[i]); } // Converts the excel data in to json workbook = XLSX.read(binary,cellStyles: true }); // only first sheet excelInJSON = XLSX.utils.sheet_to_json(workbook.Sheets[workbook.SheetNames[0]]); observer.next(excelInJSON); } // if Failed fileReader.onerror = error => observer.error(error); }); } }
从组件中,只需将事件传递给此服务,如下所示,它将使用JSON进行响应.
this.excelReaderservice.importFromExcel(ev) .subscribe(response => { // do something with the response });
以上是大佬教程为你收集整理的Angular:从FileReader返回Observable / ES6 Promise全部内容,希望文章能够帮你解决Angular:从FileReader返回Observable / ES6 Promise所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。