Ho difficoltà a trovare molto in termini di esempi/guide per l'utilizzo di osservabili in un servizio Angular2. Ci sono cose per i modelli html che si legano con EventEmitter ma questo non sembra giusto per un servizio.Impossibile capire EventEmitter o sintassi osservabili corretti nei servizi Angular2
Uno dei grandi temi di guida è allontanarsi da Promises in Angular2 ma non riesco a ottenere la nuova sintassi corretta.
Quello che sto facendo
- Ho un FirebaseAuth Servizioche può essere iniettato in altri servizi o componenti.
- ho una funzione che fa una chiamata asincrona per Firebase, nel mio esempio per creare un utente
- voglio restituire un osservabile (per sostituire la promessa) che altri servizi possono utilizzare per fare altre cose come creare un profilo quando questo viene risolto
sto bene se le promesse sono la soluzione migliore per questo esempio, ma mi piacerebbe capire quale sia il osservabile Way è.
mio servizio:
/*DS Work on firebase Auth */
import {Injectable} from 'angular2/angular2';
@Injectable()
export class FirebaseAuth {
ref = new Firebase('https://myfirebase.firebaseio.com');
//check if user is logged in
getAuth(): any {
return this.ref.getAuth();
}
//register a new user
createUser(user: any): Promise<any> {
return new Promise((resolve, reject) => {
this.ref.createUser(user, function(error, userData) {
if (error) {
reject(error);
console.log('Error creating user:", error');
} else {
resolve(userData);
console.log('Successfully created user account with uid:', userData.uid);
}
})
})
}
};
Come dovrei riscrivere questa opzione per utilizzare osservabili e/o EventEmitter?
Buona risposta sulla semantica di Osservabile vs soggetto. In particolare per Firebase, vedi anche AngularConnect [talk] di Sara Robinson (https://www.youtube.com/watch?v=RD0xYicNcaY) e [app demo] (https://github.com/sararob/angular2base) per alcuni specifici trucchi per Firebase e Angular2. – robwormald
** Estremamente utile !! ** Grazie mille per questo Eric, stavo faticando un po 'per farlo bene e questo è esattamente quello di cui avevo bisogno. Nell'esempio che hai fornito sembra che l'uso di Observable sia migliore di EventEmitter. Quale sarebbe una ragione per usarlo invece? Per quanto riguarda il discorso di Sarah, è un gran parlare e l'ho guardato un po 'di volte in realtà e mi piace l'idea di usare una pipa. L'unico problema è che il suo esempio è strettamente collegato ai componenti e anche i miei servizi devono parlare con Firebase. –
La risposta sarebbe più un'opinione personale che una risposta tecnica, quindi mi scuso per questo. Nella [documentazione EventEmitter] (https://angular.io/docs/ts/latest/api/core/EventEmitter-class.html) si legge: "Uso da direttive e componenti per l'emissione di eventi personalizzati". In altre parole scopo è quello di emettere eventi tra componenti/direttive, non è il suo scopo per gestire scenari più complessi. Certo, puoi usarlo come vuoi, ma penso che ti stia abusando di esso. –