Image Angular2-在ngFor中异步加载二进制图像数据
我正在尝试使用node的fs模块加载一些图像。我让它在一个图像上工作,但在ngFor循环中,正确的方法是什么 目前我有:Image Angular2-在ngFor中异步加载二进制图像数据,image,asynchronous,angular,binary,observable,Image,Asynchronous,Angular,Binary,Observable,我正在尝试使用node的fs模块加载一些图像。我让它在一个图像上工作,但在ngFor循环中,正确的方法是什么 目前我有: <div *ngFor="let job of getJobs() | async"> <img src={{readImageFile(job.thumbUrl)}}> </div> 这不管用。。那么,在ngFor循环中异步加载数据的正确方法是什么 更新 我尝试了readImageFile(url)| async readImag
<div *ngFor="let job of getJobs() | async">
<img src={{readImageFile(job.thumbUrl)}}>
</div>
这不管用。。那么,在ngFor循环中异步加载数据的正确方法是什么
更新
我尝试了readImageFile(url)| async
readImageFile: function(url) {
var Future = Npm.require('fibers/future');
var myFuture = new Future();
fs.readFile(String(url),
function read(error, result) {
if(error){
myFuture.throw(error);
} else {
myFuture.return(new Buffer(result).toString('base64'));
}
});
return myFuture.wait();
}
这不是一个好办法<代码>readImageFile(job.thumbUrl)将在每次更改检测运行时调用,这是非常常见的 这应该行得通
<img [src]="readImageFile(job.thumbUrl) | async">
您好,谢谢您的回复,我尝试了您的第一个建议,但仍被反复呼叫。。知道为什么吗?readImageFile()
是否返回一个可观察的?如果是,在第一个事件之后,observable是否完成?这是服务器上的readImageFile meteor方法。我怎样才能知道它是什么类型的以及它是否完成?thanksreadImageFile:function(url){var Future=Npm.require('fibers/Future');var myFuture=new Future();fs.readFile(字符串(url),function read(错误,结果){if(错误){myFuture.throw(错误);}else{myFuture.return(新缓冲区(result.toString('base64');});返回我的未来。等等();},我终于成功了!这与您的第二种方法完全相同,但在map函数中,我必须在最后添加“returnjobs;”才能让它工作。非常感谢你的帮助!在我的例子中,我有两个作业,但readImageFile回调似乎记录到控制台三次。你知道为什么吗?这是否意味着我阅读图像的次数超过了必要的次数?
<img [src]="readImageFile(job.thumbUrl) | async">
getJobs() {
this.jobs = /*code to get jobs*/.map(jobs => {
this.images = new Array(jobs.length);
jobs.forEach(item, idx => {
readImageFile(idx, item.thumbUrl);
});
return jobs;
});
}
readImageFile(idx, url) {
if (url) {
this.call('readImageFile', url, (err, res) => {
if (err) {
console.log(err);
}
else {
console.log('read image file success');
this.images[idx] = "data:image/jpg;base64," + res;
}
});
}
}
<div *ngFor="let job of jobs | async; let idx=index">
<img [src]="images[idx]">
</div>