Mi sono recentemente spostato in Angular 2 da Angular 1 e spesso incappato in problemi che tentano di rilevare le modifiche nella proprietà di un oggetto (un'operazione eseguita in precedenza tramite $ watch).Osservazione di una modifica in una proprietà dell'oggetto in Angular 2
Il tipico caso d'uso è che avrò un servizio iniettabile che mantiene un pezzo di dati, ad esempio un oggetto contenente le impostazioni:
@Injectable()
export class SettingsService
{
_settings = {
'settingA' : true,
'settingB' : false
}
...
get settings()
{
return this._settings;
}
}
mi avrà quindi un componente, ad esempio una pagina impostazioni un app ionico che otterrà le impostazioni dal servizio di configurazione:
constructor(private settingsService : SettingsService)
{
this.settings = settingsService.settings;
}
e direttamente paio le proprietà degli oggetti ad un componente dell'interfaccia utente come un toggle. Il problema è diverso dal chiamare una funzione su ogni evento di commutazione toggle come può il servizio o il componente sapere che l'oggetto delle impostazioni è stato modificato per attivare un'azione appropriata come salvare le impostazioni in un archivio dati?
Sembra che usare un BehaviorSubject richieda ancora una chiamata di funzione quando il commutatore cambia stato piuttosto che essere in grado di rilevare il cambiamento nel servizio . Buone note sull'utilizzo di EventEmitter, tuttavia, li ho usati altrove per notificare i componenti degli aggiornamenti dei dati nei servizi. – cubiclewar