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

262
Visualizações
Cambiar el valor observable en un componente no activa la suscripción en un servicio

Tengo un escenario en el que envío datos de un componente a un servicio que luego manipula los datos. La idea era que cuando obtengo datos en el componente, inserto el cambio en una variable BehaviorSubject usando next .

Por alguna razón desconocida para mí, this.person.subscribe() no se activa al pasar el valor usando next . Sin embargo, cuando compruebo si se cambió el valor en el servicio, veo que se actualizó correctamente.

Componente

 constructor(private incomeService: IncomeService) { } ngOnInit(): void { // Fetching data from a service this.person = fetchedTestData; // This doesn't trigger subscribe method in the service this.incomeService.person.next(fetchedTestData); // The data is definitely changed because the value is correctly set console.log(this.incomeService.person) }

Servicio

 person: BehaviorSubject<any> = new BehaviorSubject<any>(null); constructor() { this.person.subscribe(person => { // Do something else }); }

¿Cuál parece ser el culpable aquí?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

En general, los servicios de Angular están destinados a manejar la recuperación de datos y toda la lógica comercial, mientras que los componentes se suscriben a Observables para fines de visualización.

Si entiendo tu situación correctamente, sería mejor que hicieras algo como esto:

Servicio

 public person$$ = new BehaviorSubject<unknown>(null); public person$ = this.person$$.asObservable(); public getPerson(): void { // logic for retrieving data this.person$$.next(response); }

Componente

 public person$ = this.incomeService.person$; // if you wanted to use console for debugging you could also add // .pipe(tap(person => console.log(person))) // which would log to console whenever the person$$ subject is updated in the service constructor(private incomeService: IncomeService) {} ngOnInit(): void { this.incomeService.getPerson(); }

Modelo

 <ng-container *ngIf="person$ | async as person"> {{ person | json }} </ng-container>

En este caso, debido a que la canalización async se usa en la plantilla, maneja automáticamente la suscripción (y la cancelación de la suscripción cuando se destruye el componente). También puede .subscribe en la lógica del componente, solo asegúrese de tener una llamada para cancelar la unsubscribe en algún lugar para evitar pérdidas de memoria.

over 4 years ago · Santiago Trujillo Relatório

0

En el servicio tienes a la person como sujeto de conducta. Lo actualizaría allí, no en su componente.

componente

 this.incomeService.updatePerson('something');

Servicio

 constructor() { this.person.subscribe(person => { console.log(person); }); } updatePerson(arg:string){ console.log('is this happening?', arg); this.person.next(arg); }
over 4 years ago · Santiago Trujillo Relatório

0

El problema estaba en una función que estaba generando un error y que se ejecuta antes de llamar a next . Desafortunadamente me lo perdí porque los errores en mi consola de Google Chrome estaban ocultos.

Entonces, como recordatorio para cualquier otra persona que tenga un problema similar; verifique que sus métodos se ejecuten sin errores antes de entrar en pánico.

over 4 years ago · Santiago Trujillo 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