Estoy usando Asunto y Suscripción para transferir datos entre dos componentes, pero no me funciona.
// Primer Componente
import { Component, OnInit, OnDestroy } from '@angular/core'; import { Subscription } from 'rxjs'; import { SettingsHelperService } from '../settings-screen/settings-helper.service'; @Component({ selector: 'app-master-data-config', templateUrl: './master-data-config.component.html', styleUrls: ['./master-data-config.component.css'] }) export class MasterDataConfigComponent implements OnInit, OnDestroy { zoneSelected: boolean = false; wingSelected: boolean = false; public subscription: Subscription; constructor(private settingHelperService: SettingsHelperService) { } public ngOnDestroy(): void { this.subscription.unsubscribe(); // onDestroy cancels the subscribe request } ngOnInit(): void { this.subscription = this.settingHelperService.getSelectedValue().subscribe(data => console.log(data)); } }// Segundo Componente
import { Component, OnInit } from '@angular/core'; import { SettingsHelperService } from './settings-helper.service'; @Component({ selector: 'app-settings-screen', templateUrl: './settings-screen.component.html', styleUrls: ['./settings-screen.component.css'] }) export class SettingsScreenComponent implements OnInit { public UnitType = [ {value: 'matric', viewValue: 'Matric'}, {value: 'imperial', viewValue: 'Imperial'}, ]; zoneSelect: boolean = false; wingSelect: boolean = false; selectedUnitType: string; valueSelected = []; constructor(private settingHelperService: SettingsHelperService) { } ngOnInit() { } save(){ let valueObj = { unitType: this.selectedUnitType, zoneSelect: this.zoneSelect, wingSelect: this.wingSelect } this.settingHelperService.setValues(valueObj); } }// Servicio
import { Injectable } from '@angular/core'; import { Subject, Observable } from 'rxjs'; @Injectable() export class SettingsHelperService { public unitType:string; public valueSubmitted = null; public data = new Subject<any>(); constructor() { } getSelectedValue(){ return this.data.asObservable(); } setValues(value){ console.log(value); this.data.next(value); } }Por favor, sugiera dónde me equivoco ..?
No estoy recuperando los valores de las actualizaciones en el componente.
No veo ningún problema obvio con su código, excepto que no mostró el código donde proporciona el SettingHelperService. Eso podría ser un problema. Si no se proporciona correctamente, ambos componentes podrían tener su propia instancia del servicio y no compartir la misma. Intenta agregar este código en el servicio:
@Injectable({ providedIn: 'root', })Si eso no ayuda, compruebe este Stackblitz que hice en función de su código. Después de agregar lo anterior, funciona tal como está: https://angular-ivy-g8keel.stackblitz.io