Onde esta lat
e long
declarado em sua classe? Em nenhum momento você declarou essas propriedades, logo não existem. Mesmo que existissem você teria um erro. Você esta passando this.showPosition
como callback de navigator.geolocation.getCurrentPosition
.
No curso de JS Avançado 1, pré-requisito deste treinamento você aprendeu que funções possuem escopo dinâmico e o this de uma função não será o this
que representa o objeto da sua classe. Por isso foi introduzido o conceito de arrow function e seu escopo léxico. Eu lembro esse conceito no curso de Angular.
Alterando sua classe:
constructor(service: BoxService){
this.service = service;
this.getLocation();
// adicionando as propriedades que faltam
this.lat = 0
this.long = 0;
}
getLocation() {
if (navigator.geolocation) {
// usando arrow function
navigator.geolocation.getCurrentPosition(position => {
this.lat = position.coords.latitude;
this.long = position.coords.longitude;
});
} else {
alert("Sorry, geolocation is not supported by this browser.");
}
}
Mas você omitiu o código completo da sua classe e não dá para eu entender se getLocation
será chamada por ela ou por alguém que vá usar o serviço. Ou seja, não esta claro para quem lê e deseja recomendar qualquer melhoria a sua intenção com esse código. Consigo enxergar que você quer a latitude e longitude, mas para quem? Quem chama o serviço? Se for, porque guardar esses valores em propriedades da classe?
Fornece pra gente uma visão geral do que você quer com getLocation()
.