【发布时间】:2018-11-06 16:24:50
【问题描述】:
我遇到了 Angular 的数据绑定延迟的问题。
当this.notAvailable 的值发生更改时,[class.hide] 在代码运行后约 5 秒后才会在前端更新。
console.log 结果立即显示正确的值,这真的让我不知道为什么会发生这种情况。
代码如下:
xxx.ts
getPostcodeGeo(postcode) {
postcode = postcode.replace(' ', '');
this.geocoder.geocode({'address': postcode}, (result, status) => {
if (status === google.maps.GeocoderStatus.OK) {
this.notAvailable = false;
console.log(this.notAvailable);
}
if (status === google.maps.GeocoderStatus.REQUEST_DENIED) {
this.notAvailable = true;
console.log(this.notAvailable);
}
});
}
xxx.html
<div [class.hide]="notAvailable">
<span>Unable to find address</span>
</div>
起初我以为是地理编码器需要一些时间,但后来我添加了 console.logs 以查看控制台是否存在延迟。
我在这里做错了吗?
任何帮助将不胜感激。
【问题讨论】:
-
console.log后面加上changeDetectionRef->detectChanges怎么样?
-
这听起来像是代码在 Angular 区域之外运行(即
this.geocoder.geocode({'address': postcode}, (result, status) => { ... probably this code ... })。如果您将区域注入到您的组件中(即constructor(private ngZone: NgZone) {})并将代码包装在该回调中,您的问题应该是固定的。 -
@DanielWSrimpel 这可以更快地运行代码,但会不断返回 REQUEST_DENIED。
-
你有没有试过
console.logstatus看看会发生什么? -
是的,它正在返回 REQUEST_DENIED,然后在我一直在测试的邮政编码上返回 OK。
标签: javascript angular google-maps data-binding geocoding