Angular2 öğesini kullanarak Angular2 projesinde bir öğeyi FirebaseListObservable nesnesinde güncelleştirmeye çalışıyorum. aşağıdaki gibi FirebaseListObservable için tanımı şöyledir:AngularFire 2 kullanarak bir FirebaseListObservable öğesindeki bir öğenin güncellenmesi
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>;
}
Ben benziyor evler, kaydetmek, silme ve güncelleme, göstermek için bir servis var şu:
@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);
}
}
houses$
olduğu FirebaseListObservable
ve house
listeden bir üründür. Ev aşağıdaki gibi görünen bir nesnedir:
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 "]"
ben orijinal nesneyi koyarak denedim: Ben kaydetmeye çalıştığınızda
{
name: "Mrs. Friendly",
notes: "Watch out for fence!",
street: "2530 Adams Ave.",
$key: "-KKQWsf26apDiXZNExZd"
}
/varolan öğeyi güncellemek, aşağıdaki hatayı alıyorum İlk parametre, tam URL'yi buraya koymanız ve düşünebileceğiniz hemen her kombinasyon. Gözlemlenebilir tanımına göre, _ref de orada çalışmalıdır. Ayrıca saklanacak verilerin anahtarını çekmeyi denedim ve hiçbir şey işe yaramıyor gibi görünüyor.
this.af.database.object('/houses/'+house.$key).set(house);
ben güncelleme yöntemi çalışacak yüzden ilk parametre koymak olması gereken merak ediyorum: iş gibi görünüyor tek şey aşağıdaki tamamen güncelleme satırını kaldırın ve kullanmaktır. Ben Açısal 2 rc-1, Firebase 3.0.5 kullanıyorum
ve angularfire 2.0.0-beta.1
Bu hak hat boyunca, ancak ikinci argüman için, sadece güncellenmiş verileri koymak için gerekli, bu yüzden daha this._houses.update (ev $ anahtarı {lat benziyor. 1234, Ing : 5678}). Orijinal nesneyi koymak, anahtar üzerinde çakışmalara neden olur. – jloosli
@jloosli Yorum için teşekkür ederiz. Nesnenin anahtarının ikinci argümanda kaldırılması gerekir. key = house. $ Key; ev sil. $ Anahtar; this._houses.update (anahtar, ev); – Amsakanna