Angular, FormControl i Mediator

0

Mam dwa równorzędne komponenty:

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

W nav-menu jest kontrolka

 <input [formControl]="selectDateInput"/>

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

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

Po stronie nav-menu:

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

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

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

{...
	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:

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

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

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

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1