【发布时间】:2017-11-22 18:28:30
【问题描述】:
我必须将图片网址转换为 base64 编码字符串(因为 this)
import { Pipe, PipeTransform } from '@angular/core';
declare var base64;
@Pipe({
name: 'tobase64'
})
export class Tobase64Pipe implements PipeTransform {
transform(value: any, args?: any): any {
var xmlHTTP = new XMLHttpRequest();
xmlHTTP.open('GET', value, true);
xmlHTTP.responseType = 'arraybuffer';
xmlHTTP.onload = (e) => {
console.log('e',e);
var arr = new Uint8Array(e.currentTarget.response);
var raw = String.fromCharCode.apply(null, arr);
var b64 = base64.encode(raw);
var dataURL = "data:image/png;base64," + b64;
return dataURL;
};
xmlHTTP.send();
return null;
}
}
HTML
<image x="0" y="0" width="500" height="500" [attr.xlink:href]="'assets/hand.jpg' | tobase64" mask="url(#hole)" />
错误:
ERROR RangeError: Maximum call stack size exceeded
【问题讨论】:
-
检查这个stackoverflow.com/questions/9267899/… 它看起来可能会有所帮助 - 您可能需要包含一个 for 循环。问题也可能重复。
-
ouch,一个进行 Http 调用的管道。我不认为这是个好主意。每次对作用域组件进行一些更改时,管道都会重新运行。这就是您收到此错误的原因。只需检查您的请求,它会溢出 http 堆栈。
-
更不用说 .apply() 它将为每个 charCode 执行一个函数,对于 base64 编码的图像来说将不止几个。
标签: javascript angular