2017-12-14 6 views
0
ngOnInit() { 
      this.getPointsOfInterest(this.lat, this.lon).subscribe(
(response) => {this.data = response.json(); 
       this.lat = this.data.lat; 
       this.lon = this.data.lon; 
        }, 
(error) => console.log(error) 
} 

ngAfterViewInit() { 
    var src = { lat: this.lat, lng: this.lon }; 
    var map = L.map('map', { zoomControl: false }).setView(src, 14); 
} 

データはまだngAfterViewInit this.latおよびthis.lon = undefinedにアップロードされていません。Angular2 Oninit with AfterViewInit

解決方法

+0

は、より多くのコードの代わりにコメントを共有してください:

は、より多くの情報については、次のURLをご確認ください。 –

+0

'ngAfterViewInit'は、ビューが初期化された後に呼び出されます。サーバからのデータは必ずしも受信されません。データは、サーバーからの応答を受信した後にのみアクセスする必要があります。 – ArunDhaJ

答えて

0

私はあなたの要求の出力を観察するためにサブスクライブし、次にあなたが

ngOnInit() { 
    this.getData(); 
    } 

    getData() { 
    this.http.get('/app/data.json') 
     .map((res:Response) => res.json()) 
     .subscribe(
     data => { 
      this.data= data; 
      // actions with data 
     }, 
     err => console.error(err), 
     () => console.log('done') 
    ); 
    } 
0

ngAfterViewInitあなたはそれがないと思うように動作しませんデータで何をする必要があるかやることができると思います。 Angularは、子コンポーネントと現在のコンポーネントビューを初期化すると、このメソッドを呼び出します。

この時点で、非同期リクエストが完了していない場合があります。あなたはいつもその準備ができているとは思えません。ngAfterViewInit

あなたのデータは購読方法で使うべきです。 Life cycle hooks