2017-02-27 84 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