2016-06-22 23 views
0

gmaps apiを非同期にロードするサービスがあります。ロードすると、そのサービスにプロパティ名「isGoogleMapLibraryLoaded」がtrueに設定されて保存されます。経路変更時にAngular2サービスが再インスタンス化される

私は別のルート(コースをリフレッシュせずに)に戻り、前のページに戻ると、サービスが再インスタンス化され、 "isGoogleMapLibraryLoaded"プロパティが失われました。

ルートを切り替えるときにもサービス内のプロパティを設定するにはどうすればよいですか?

マイサービス:

import { Injectable } from '@angular/core'; 

const GOOGLE_MAPS_API_KEY = 'AIzaSyDvo543530SU_xsZLvZ6SjTFbt1FPW9FI'; 
const URL = `https://maps.googleapis.com/maps/api/js?key=${GOOGLE_MAPS_API_KEY}&callback=__onGoogleMapLoaded`; 

@Injectable() 
export class GoogleMapService { 
    /** 
    * Google maps loading status (althought loading is not completed) 
    */ 
    private isGoogleMapLibraryLoaded: Boolean = false; 
    constructor(){ 
    } 

    getNewMapInstance(element, props){ 
    console.log(this.isGoogleMapLibraryLoaded); 
    this._loading().then(() => { 
     return new google.maps.Map(element, props); 
    }); 
    } 

    private _loading(){ 
    return new Promise((resolve, reject) => { 
     if(!this.isGoogleMapLibraryLoaded){ 
     this.isGoogleMapLibraryLoaded = true; 

      resolve(); 

     }else{ 
     resolve(); 
     } 
    }); 
    } 
} 

Iブートストラップでサービスを追加し、I成分コンストラクタでそれを注入してい

コンストラクタ(プライベートmapService:GoogleMapService){}

ngAfterViewInit() { 
    this.googleMapInstance = this.mapService.getNewMapInstance(this.googleMapWrapperElement.nativeElement, { 
     center: {lat: -34.397, lng: 150.644}, 
     scrollwheel: false, 
     zoom: 8 
    }); 
    } 

答えて

0

すなわちあなたがサービスを提供する場所によって異なります。ルートコンポーネントで提供すると、インスタンスはルートコンポーネント(Angularアプリケーションが実行されている限り)に存在します。

ルーティングされたコンポーネントで提供すると、コンポーネントが削除されるとすぐに破棄されます。

関連する問題