无法读取空 bing 映射的 属性 'prototype' 和 Angular4

Can not read property 'prototype' of null bing maps and Angular4

我正在尝试在 angular 4 中制作和 bing 组件,它根本不会让我渲染地图..

这是我的 index.html 文件:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Microsoft</title>
  <base href="/">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
  <script type='text/javascript' src='http://www.bing.com/api/maps/mapcontrol?branch=experime‌​ntal'></script>
</head>
<body onload="AppComponent.helloWorld()">
<div id="myMap"></div>
  <app-root></app-root>
</body>
</html>

这是我的组件:

 export class AppComponent implements OnInit {
  @ViewChild('myMap') myMap;
  title = 'app';

  ngOnInit() {
    if(Microsoft !== undefined){
    var map = new Microsoft.Maps.Map(this.myMap.nativeElement, {
      credentials: 'key goes here'
    });
  }}
}

组件HTML文件:

<div #myMap style='width: 100%; height: 500px;'></div>

我不知道我做错了什么。但我无法加载地图。它正在抛出 Cannot read 属性 'prototype' of null error.

执行ngOnInit()时,#myMap不存在,所以将代码移至ngAfterViewChecked()

在 ngAfterViewInit() 生命周期检查 运行 之前,使用 @ViewChild 装饰器查询的元素不可用。它们在 ngOnInit() 中是未定义的。尝试将该声明移至

ngAfterViewInit() {
  if(Microsoft !== undefined){
    var map = new Microsoft.Maps.Map(this.myMap.nativeElement, {
    credentials: 'key goes here'
    });
 }
}

尽管我没有在您的代码中看到 'Microsoft' 对象的定义位置。您是单独导入它而没​​有包含它吗?

我终于明白了。嗯,其实是我的同事

所以我的想法是等到文档准备好后再加载组件。

所以在app组件中: 免责声明:请勿复制此代码,它不会起作用。我只是在这里闲着。

@Component({
    selector: 'app-root',
    template: '<bing-maps *ngIf="ready"></bing-maps'

})
export class app implements onInit {
ready: boolean;

constructor() {}
ngOnInit(){

document.onreadystatechange = () => {
     if(document.readyState === "complete"){
        this.ready = true
     }
   }

}

}

就是这个想法,在 bing-maps 组件中,您拥有带有 id="myMap" 的 div,并在其 onInit() 中提供凭据。