Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

147
Visualizações
¿Por qué no puedo acceder a las propiedades de clase dentro de una función pasada de un componente Angular?

Estoy usando la geolocalización HTML 5 dentro de un componente Angular:

 ... export class AngularComponent { ... constructor(private db: DatabaseService) {} // this function is assigned to an HTML button logCoords(message, action) { navigator.geolocation.getCurrentPosition(this.success, this.error, this.options); } success(pos) { function time() { ... } var crd = pos.coords; var lat = crd.latitude var long = crd.longitude let newCoordinates = {'lat': lat, 'long':long, 'time': time} this.db.addLocation(newCoordinates) } ... } ...

Quiero almacenar el resultado del método getCurrentPosition dentro de la base de datos indexada usando un servicio Angular pero no puedo acceder a ninguna propiedad de la clase de componente (this.db es nulo).

¿Por qué no puedo acceder a this.db dentro de la función de éxito y cómo puedo solucionar esto?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Porque pierdes this contexto al pasar el método como una devolución de llamada. Puede solucionar esto de varias maneras:

 logCoords(message, action) { // bind context navigator.geolocation.getCurrentPosition(this.success.bind(this), this.error.bind(this), this.options); }

o

 logCoords(message, action) { navigator.geolocation.getCurrentPosition(this.success, this.error, this.options); success = (pos) => {} // <= arrow function error = () => {} // <= arrow function }
about 4 years ago · Juan Pablo Isaza Relatório

0

El problema es con la siguiente línea:

 navigator.geolocation.getCurrentPosition(this.success, this.error, this.options);

En la línea anterior, solo está pasando this.success como devolución de llamada sin establecer el contexto. Entonces, en este caso, según los principios de JavaScript, this siempre se referiría al objeto de la ventana mientras espera la referencia del componente.
Para solucionar esto, debe establecer el contexto (instancia del componente) antes de pasar this.success y, para ese propósito, javascript proporcionó la función bind().

Pruebe el siguiente código (solución muy simple) -

 navigator.geolocation.getCurrentPosition(this.success.bind(this), this.error.bind(this), this.options);

Para obtener más detalles sobre la función bind (), consulte el siguiente enlace:

https://developer.mozilla.org/enUS/docs/Web/JavaScript/Reference/Global_objects/Function/bind

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda