2016-05-10 38 views
0

我試圖檢索用戶的地理位置,然後在單獨的api調用中使用它。當我做到以下我得到這個錯誤。該服務是'getLegislatorByLocation',它位於geoSuccess方法中。使用服務的方法

EXCEPTION: TypeError: Cannot read property 'getLegislatorByLocation' of undefined

export class LocalLegislatorsComponent implements OnInit { 

    constructor(private _legislatorService: LegislatorService) { 

    } 

    ngOnInit(): void {  
     this.geoFindUser();      
    } 



    geoFindUser(): void { 

     if (!navigator.geolocation) { 
      this.geoSupport = false; 
      return; 
     } 

     navigator.geolocation.getCurrentPosition(this.geoSuccess, this.geoError); 
    } 

    geoSuccess(position): void { 
     this.geoSupport = true; 
     this.latitude = position.coords.latitude; 
     this.longitude = position.coords.longitude; 

     this._legislatorService.getLegislatorByLocation(this.latitude, this.longitude) 
      .subscribe(legislators => this.legislators = legislators, error => this.errorMessage = <any>error); 
    } 

    geoError(): void { 
     console.log('Unable to retrieve location'); 
     this.geoSupport = false; 
    } 
} 

難道我莫名其妙地需要注入服務進入方法?

+0

能否請你嘗試'的console.log(_legislatorService)'添加到構造和發佈它所打印的?除了使用構造函數進行注入之外,您不需要執行任何操作。還有其他的錯誤。您是否已將'LegislatorService'添加到'providers'? –

+0

'LegislatorService',如果你寫的,需要'@Injectable'裝飾器,並且應該在引導程序調用中添加到組件的提供者或提供者數組中。 – rinukkusu

+0

它擁有@Injectable裝飾器。如果我在「ngOnInit()」中調用它,它工作正常當我將它移入geoSuccess()方法時發生問題 – dave

回答

2

你的代碼輸this.範圍這一行

navigator.geolocation.getCurrentPosition(this.geoSuccess, this.geoError); 

,如果你將其更改爲

navigator.geolocation.getCurrentPosition((pos) => this.geoSuccess(pos), this.geoError); 

它應該工作。

神奇的是這保證了當geoSuccess()會從getCurrentPosition()內稱爲this仍將指向的LocalLegislatorsComponent當前實例,同時否則將指向getCurrentPosition()功能或徘徊無論geoSuccess正在從所謂的=>

https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Functions/Arrow_functions

看到周圍工作的另一種方法是

navigator.geolocation.getCurrentPosition(this.geoSuccess.bind(this), this.geoError); 
+1

完全像魔術一樣。這有訣竅,謝謝你提供的信息非常豐富! – dave