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

213
Visualizações
Refactorización de un método para devolver un valor de addEventListener en Angular

Estoy comprobando el estado de la red en mi aplicación Angular desde network.service.ts

// red.servicio.ts

 import { Injectable } from '@angular/core'; import { BehaviorSubject } from "rxjs"; @Injectable() export class NetworkStatusService { public status: BehaviorSubject<any> = new BehaviorSubject<any>(null); public appStatus() { window.addEventListener('online', this.networkStatusChanged.bind(this)); window.addEventListener('offline', this.networkStatusChanged.bind(this)); } public networkStatusChanged(): void { this.status.next(!navigator.onLine); } }

En mi componente, estoy inyectando este servicio y en ngOnInit,

Llamo a este método appStatus del servicio y luego me suscribo al estado (BehaviorSubject) para obtener el valor.

En mi componente:

 public ngOnInit() { this.networkService.appStatus(); this.networkService.status.subscribe((x)=>{ console.log('status here', x); if(x) { // do something } }); }

Esto funciona y registra el valor booleano cada vez que la aplicación está en línea o fuera de línea. Pero el problema es que tendría que llamar a este método y luego suscribirme y cancelar la suscripción en casi todos los componentes. Sé que addEventListener no devuelve un valor, pero ¿hay alguna manera de refactorizar esto, de modo que solo llame a appStatus() desde el componente y devuelva un valor booleano (verdadero/falso) siempre que la aplicación esté fuera de línea/en línea?

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

0

Simplemente puede crear un getter en cualquier componente donde desee llamar a appStatus, devolverá el valor del estado de la red.

 public get appStatus () { return navigator.onLine }

Pero si necesita escuchar cada vez que BehaviorSubject emite valor, debe suscribirse.

about 4 years ago · Juan Pablo Isaza Relatório

0

Agregue sus oyentes dentro del constructor de la clase de servicio en lugar de la función appStatus(). De esta manera, no tiene que llamarlo cada vez o desde cada componente.

 import { Injectable } from '@angular/core'; import { BehaviorSubject } from "rxjs"; @Injectable() export class NetworkStatusService { public status: BehaviorSubject<any> = new BehaviorSubject<any>(null); constructor() { window.addEventListener('online', this.networkStatusChanged.bind(this)); window.addEventListener('offline', this.networkStatusChanged.bind(this)); } public networkStatusChanged(): void { this.status.next(!navigator.onLine); } }

Ahora suscríbase a this.networkService.status desde cualquier componente como lo está haciendo actualmente.

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