Ich versuche, ein Element in einem FirebaseListObservable Objekt in einem Angular2 Projekt Angularfire2 mit zu aktualisieren. Die Definition für die FirebaseListObservable ist wie folgt:ein Element in einem FirebaseListObservable mit AngularFire aktualisiert 2
export declare type FirebaseOperation = string | firebase.database.Reference | firebase.database.DataSnapshot | AFUnwrappedDataSnapshot;
export declare class FirebaseListObservable<T> extends Observable<T> {
_ref: firebase.database.Reference | firebase.database.Query;
constructor(_ref: firebase.database.Reference | firebase.database.Query, subscribe?: <R>(subscriber: Subscriber<R>) => Subscription | Function | void);
lift<T, R>(operator: Operator<T, R>): Observable<R>;
push(val: any): firebase.database.ThenableReference;
update(item: FirebaseOperation, value: Object): firebase.Promise<void>;
remove(item?: FirebaseOperation): firebase.Promise<void>;
_checkOperationCases(item: FirebaseOperation, cases: FirebaseOperationCases): firebase.Promise<void>;
}
Ich habe einen Dienst zu zeigen, speichern, löschen und die Häuser aktualisieren, die wie folgt aussieht:
@Injectable()
export class HousesService {
private _houses$:FirebaseListObservable<IHouse[]>;
constructor(private af:AngularFire) {
this._houses$ = this.af.database.list('/houses');
}
save(house:IHouse) {
if (house.hasOwnProperty('$key')) {
this._houses.update('/houses/'+house.$key).set(house);
} else {
this._houses$.push(house);
}
}
remove(id:any) {
this._houses$.remove(id);
}
}
wo houses$
ist die FirebaseListObservable
und house
ist ein Element aus der Liste. House ist ein Objekt, das wie folgt aussieht:
{
name: "Mrs. Friendly",
notes: "Watch out for fence!",
street: "2530 Adams Ave.",
$key: "-KKQWsf26apDiXZNExZd"
}
Wenn ich versuche, ein vorhandenes Element zu speichern/aktualisieren, erhalte ich folgende Fehlermeldung:
Uncaught Error: Firebase.update failed: First argument contains an invalid key ($key) in path /$key. Keys must be non-empty strings and can't contain ".", "#", "$", "/", "[", or "]"
Ich habe versucht, das ursprüngliche Objekt setzen in der erste Parameter, der die vollständige URL und fast jede denkbare Kombination enthält. Gemäß der Definition für das Observable sollte das _ref auch dort funktionieren. Ich habe auch versucht, die Schlüssel aus den Daten ziehen gespeichert werden und nichts scheint zu funktionieren. Das einzige, was zu funktionieren scheint, ist das Update Linie vollständig und verwenden Sie die folgenden entfernen:
this.af.database.object('/houses/'+house.$key).set(house);
Ich bin gespannt, was ich in den ersten Parameter gesetzt haben sollte, so würde die Update-Methode arbeiten.
I Angular 2 rc-1, Feuerbasis 3.0.5 bin mit und angularfire 2.0.0-beta.1
Dieses entlang der rechten Linie ist, aber für das zweite Argument, ich brauchte nur die aktualisierten Daten zu setzen, so sieht es eher wie this._houses.update (Haus $ key, {lat.: 1234, lng : 5678}). Wenn Sie das ursprüngliche Objekt einfügen, entsteht ein Konflikt auf dem Schlüssel. – jloosli
@jloosli Danke für den Kommentar. Der Schlüssel des Objekts muss im zweiten Argument entfernt werden. Schlüssel = Haus. $ Schlüssel; Haus löschen. $ Key; this._houses.update (Schlüssel, Haus); – Amsakanna