Angularfire2を使用してAngular2プロジェクトのFirebaseListObservableオブジェクト内のアイテムを更新しようとしています。次のようにFirebaseListObservableの定義は次のとおりです。AngularFire 2を使用してFirebaseListObservable内のアイテムを更新する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>;
}
私はのように見える家を、保存、削除、および更新し、表示するサービスを持って、次の
@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$
がどこにあるかFirebaseListObservable
とhouse
はリストの項目です。家は次のようなオブジェクトです:
{
name: "Mrs. Friendly",
notes: "Watch out for fence!",
street: "2530 Adams Ave.",
$key: "-KKQWsf26apDiXZNExZd"
}
私は既存のアイテムを更新/保存しようとすると、私は次のエラーを取得する:
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 "]"
私は元のオブジェクトを入れて試してみました最初のパラメータ、そこに完全なURLを置き、あなたが考えることができるほとんどすべての組み合わせ。 Observableの定義によれば、_refもそこで動作するはずです。私はまた、格納されるデータからキーを引き抜こうとしましたが、何も動作していないようです。動作しているようです唯一のことは完全に更新行を削除し、以下を使用することです:
this.af.database.object('/houses/'+house.$key).set(house);
私は更新方法がうまくいくように、私は最初のパラメータに入れているべきか興味があります。私は角2 RC-1、firebase 3.0.5、およびangularfire 2.0.0-beta.1
これは、右のラインに沿っているが、2番目の引数のために、私はちょうど更新されたデータを入れるために必要なので、それはより多くのthis._houses.update(家$キー、{緯度のようになります。1234年、LNG :5678})。元のオブジェクトを配置すると、キーに競合が発生します。 – jloosli
@jloosliコメントありがとうございます。 2番目の引数でオブジェクトのキーを削除する必要があります。 key = house。$ key; ハウスを削除する$ key; this._houses.update(key、house); – Amsakanna