Angular, FormControl i Mediator

Angular, FormControl i Mediator
Langus
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 5 lat
  • Postów:16
0

Mam dwa równorzędne komponenty:

Kopiuj
<nav-menu></nav-menu>
<router-outlet></router-outlet>

W nav-menu jest kontrolka

Kopiuj
 <input [formControl]="selectDateInput"/>

Komponenty komunikują się za pomocą wstrzykiwanego mediatora AppSvc:

Kopiuj
export class AppSvc{
   	onDataChange: EventEmitter<Date> = new EventEmitter();
}

Po stronie nav-menu:

Kopiuj
{...
 	selectDateInput: FormControl = new FormControl();

	constructor(...){
		this.selectDateInput.valueChanges.subscribe(val => this.appSvc.onDataChange.emit(val));
	}
...}

Po stronie aktualnie wyśiwtlanego kompnentu w router-outlet:

Kopiuj
{...
	constructor(...){
		this.appSvc.onDataChange.subscribe(val =>  this.date= val);
	}
...}

Wszystko działa jak ta lala, do czasu gdy nie postanowiłem ustawić wartość domyślną kontrolki. W konstruktorze nav-menu dodałem:

Kopiuj
this.selectDateInput.setValue(new Date());

Wartość domyślna nie jest przekazywana do drugiego komponentu? Co robię źle?

RA
  • Rejestracja:prawie 11 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Warszawa
  • Postów:19
0

setValue powinno domyślnie wywołać event (options -> emitEvent)
https://angular.io/api/forms/FormControl#setValue
Spróbuj dać timeouta dla wywołania setvalue, może drugi komponent nie zdążył się zasubskrybować do serwisu

edytowany 1x, ostatnio: Radoix
Langus
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 5 lat
  • Postów:16
0
Radoix napisał(a):

Spróbuj dać timeouta dla wywołania setvalue, może drugi komponent nie zdążył się zasubskrybować do serwisu

najpewniej o to chodzi. Trzeba się wgryźć w kolejność inicjacji komponentów
Rozwiązałem problem w inny sposób, defaultową wartość ustawiam w mediatorze, i pobieram z niego do jednego i drugiego komponentu. Później wartość już normalnie się synchronizuje między komponentami.

edytowany 1x, ostatnio: Langus

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.