也许是一个菜鸟问题,但我无法找到有关此问题的信息。问题出在一个返回Observable的函数中。调用此参数时,参数有效,但在Observable中,其值为undefined
。
这是我的功能:
import {Observable} from 'rxjs/Observable';
export function ToBase64(inputFile) {
console.log('Input:', inputFile); //Here the variable has the correct value
let observable = new Observable(observator => {
try {
console.log('Input en observable:', inputFile); //here is undefined :(
var image = {};
var reader = new FileReader();
reader.onload = (e) => {
image.base64 = btoa(e.target.result);
var stringBase64 = `data:${image.filetype};base64,${image.base64}`;
observator.next(stringBase64);
observator.complete()
};
console.log(inputFile);
var inputFile = inputFile.files[0];
image.filetype = inputFile.type;
image.size = inputFile.size;
image.filename = inputFile.name;
reader.readAsBinaryString(inputFile);
} catch (e) {
observator.error(e);
}
});
return observable;
}
我的功能是从Angular2应用程序中调用的,如下所示:
//imports...
export class MedicosListComponent {
@ViewChild('imagenMedico') imagenMedico:any;
private image:string;
constructor() {
}
showAllWeas() {
ToBase64(this.imagenMedico.nativeElement).subscribe(
data => {
alert(data)
},
error => alert(error)
)
}
}
medicoList
变量是输入类型文件。
提前感谢您的帮助。
答案 0 :(得分:0)
我不知道为什么,但具体问题是范围,只在其工作的函数中添加一个额外的变量,如下所示:
import {Observable} from 'rxjs/Observable';
export function ToBase64(inputFile) {
var i = inputFile; // <------- extra variable
return new Observable(obs => {
try {
var image = {};
var reader = new FileReader();
reader.onload = (e) => {
image.base64 = btoa(e.target.result);
var stringBase64 = `data:${image.filetype};base64,${image.base64}`;
obs.next(stringBase64);
obs.complete()
};
var inputFile = i.files[0]; //here i has the correct value
image.filetype = inputFile.type;
image.size = inputFile.size;
image.filename = inputFile.name;
reader.readAsBinaryString(inputFile);
} catch (e) {
obs.error(e);
}
});
}
就是这样。