对视图上函数的角度绑定导致对数据服务的无限调用
Angular Binding to a function on the view results to infinite calls to the data service
我正在尝试将图像的src
属性绑定到ngFor
指令中,该指令如下所示:
<div *ngFor="imageId of imageIds">
<img [attr.src]="imageSrc(imageId)" alt="{{imageId}}">
</div>
组件内部的imageSrc
方法如下所示:
imageSrc(imageId: string){
var hostUrl = "http://192.168.0.101:3000/";
var imageUrl = hostUrl+"images/"+imageId;
var imgSrc = "";
this._imageService.getImage(imageId)
.subscribe(image => {
imgSrc = hostUrl + image.url
});
return imgSrc;
}
Injectable
ImageService
中的getImage
函数如下所示:
getImage(id: string) {
var _imageUrl = "http://192.168.0.101:3000/images/"+id;
return this.http.get(_imageUrl)
.map(res => <Image>res.json().data)
.catch(this.handleError)
}
问题是,如果只有两个imageIds
,*ngFor
指令会按预期呈现两个列表项(但没有显示图像),但对数据服务的调用并没有停止,它会在一个看似无限循环的过程中反复获取这两个图像,直到应用程序崩溃。我做错了什么?
我认为这与*ngFor
无关。如果您从视图绑定到一个函数,那么每当Angular运行更改检测时都会调用该函数,默认情况下,更改检测会针对页面上发生的每个事件进行。
在devMode
中(与prodMode
相反),变化检测甚至对每个事件运行两次。
将结果存储在一个属性中并绑定到该属性,或者如果输入参数(id:string
)自上次调用以来没有更改,则至少在后续调用中从函数返回缓存结果。
例如,如中所示https://stackoverflow.com/a/36291681/217408
相关文章:
- AngularJS-需要在index.html页面中访问来自服务的数据
- 角度服务未返回数据
- 对视图上函数的角度绑定导致对数据服务的无限调用
- AngularJS中共享数据服务初始化失败
- Angular promise服务作为全局数据服务
- (IONIC)错误: [$injector:unpr] 未知提供程序: 数据服务提供程序 <- 数据服务<- 身份验证控
- 读取数据服务中的参数值
- 数据服务和离子的问题
- 过帐时更改oData条目中的属性.[WCF数据服务+EF+SQL expression]
- Angularjs无法将数据服务响应添加到作用域变量
- WSO2——在jaggery应用程序中调用数据服务
- Angularjs在控制器之间共享数据(服务方式)——不调用监视器
- 处理数据服务或控制器
- JS数据服务加载所有数据或只需要的数据
- 在AngularJS中使用Wcf数据服务
- 具有多个API数据服务的应用程序
- 将Breeze(使用Angular)连接到现有的WCF数据服务
- PhoneGap环境变量与开发环境中的AJAX数据服务有关
- Angular在控制器之间共享数据:服务与事件
- 从 WCF/ADO.NET 数据服务中的请求正文接收参数