2017-02-27 94 views
0

我正在學習Angular 2.我使用帶有Observable的LocationService,它在一段時間之後提供給我座標。這是我的代碼。Angular 2,訂閱時收到座標

location.service.ts

public getLocation(): Observable<any> { 
    return Observable.create(observer => { 
     if(window.navigator && window.navigator.geolocation) { 
      window.navigator.geolocation.getCurrentPosition(
       (position) => { 
        observer.next(position); 
        observer.complete(); 
       }, 
       (error) => observer.error(error) 
      ); 
     } else { 
      observer.error('Unsupported Browser'); 
     } 
    }); 
} 

app.component.ts

ngOnInit() { 
    this.location.getLocation().subscribe((coordinates) => { 
     this.lat = coordinates.coords.latitude; 
     this.lng = coordinates.coords.longitude; 
    }); 
} 

我如何訂閱座標的接收這樣我就可以呈現地圖,添加一個標記, ..一旦我從第一個訂閱接收它們。

回答

1

首先,我會將該方法放入服務中。

所以說你有一個名爲location.service.tsexport class LocationService文件這個文件中,你將有以下

getLocation(): Observable<any> { 
    return Observable.create(observer => { 
     if(window.navigator && window.navigator.geolocation) { 
      window.navigator.geolocation.getCurrentPosition(
       (position) => { 
        observer.next(position); 
        observer.complete(); 
       }, 
       (error) => observer.error(error) 
      ); 
     } else { 
      observer.error('Unsupported Browser'); 
     } 
    }); 
} 

裏面你是組件,你會做這樣的事情:

import { Component, OnInit } from '@angular/core'; 
import { LocationService } from '/shared/location.service.ts'; 

@Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html', 
    styleUrls: ['./app.component.css'] 
}) 
export class AppComponent implments OnInit { 

    constructor(private service: LocationService) {} 

    ngOnInit(){ 
    this.service.getLocation().subscribe(rep => { 
     // do something with Rep, Rep will have the data you desire. 
    }); 
    } 
} 
+0

謝謝!事實確實如此。我會添加我的app.component代碼 – Notflip

+0

@Notflip我剛剛更新了答案。 –

+0

在我的代碼中,我在app.component上設置了coords lat和lng變量,你會推薦這個嗎?併爲地圖創建一個新的監聽者/可觀察者?或者只是在訂閱第一個實例時執行所有的邏輯。看起來像凌亂的代碼,不是嗎? – Notflip