Im在加载时使用数据加载角模板由于调用未定义的属性,几秒钟后,服务器的downlaoding数据完成并且模板加载数据后,出现错误。很明显,有异步问题。但我已经实现了OnInit方法来加载所需的数据到模板,在这里我很困惑,并要求帮助。未定义模板加载角度(尽管承诺)
@Component({
selector: 'drawing',
templateUrl: './drawing.component.html',
styleUrls: ['./drawing.component.css']
})
export class DrawingComponent implements OnInit{
private drawing: Drawing;
constructor(private drawingService: DrawingService){}
getDrawing(): void {
this.drawingService.getDrawing().then((data) => {this.drawing = data});
}
ngOnInit(): void {
this.getDrawing();
}
getUrl(): string {
return 'http://www.localhost:8080/api/image/' + this.drawing.drawingUrl;
}
下图类:
export class Drawing {
drawingId: number;
drawingUrl: string;
zoom: number;
rotation: number;
}
以下组件的HTML tempalte
<button (click)="zoomIn()">Zoom In</button>
<button (click)="zoomOut()">Zoom Out</button>
<button (click)="rotateView()">Rotate</button>
<pdf-viewer
id="textLayer"
[src]="getUrl()"
[page]="page"
[original-size]="true"
style="display: block;"
[zoom]="getZoom()"
[render-text]="false"
(click)="getCoordinates($event)"
[rotation]="getRotation()"
></pdf-viewer>
和绘图服务:
@Injectable()
export class DrawingService {
private drawingUrl = 'http://www.localhost:8080/api/drawing/1';
constructor(
private http: Http){}
getDrawing(): Promise<Drawing> {
return this.http.get(this.drawingUrl).toPromise().then((res) => res.json() as Drawing);
}
}
所以先上载即时得到
ERROR TypeError: Cannot read property 'drawingUrl' of undefined
at DrawingComponent.webpackJsonp../src/app/drawing/drawing.component.ts.DrawingComponent.getUrl
和几秒钟后,它加载
你似乎对Promise的工作原理有一个根本性的误解。您显然正在尝试在准备好之前访问'drawing'成员。你的'getUrl'方法是可能的罪魁祸首。 –
一旦A在未来某个任意点完成,Promise只是一个方便的方法。由于您在A完成之前尝试访问B的结果,因此会出现错误。 –