jlo*_*sli 6 angularfire angular
我正在尝试使用Angularfire2 更新Angular2项目中FirebaseListObservable对象中的项目.FirebaseListObservable的定义如下:
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>;
}
Run Code Online (Sandbox Code Playgroud)
我有一个显示,保存,删除和更新房屋的服务,如下所示:
@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);
}
}
Run Code Online (Sandbox Code Playgroud)
这里houses$是FirebaseListObservable和house是从列表中的项目.House是一个如下所示的对象:
{
name: "Mrs. Friendly",
notes: "Watch out for fence!",
street: "2530 Adams Ave.",
$key: "-KKQWsf26apDiXZNExZd"
}
Run Code Online (Sandbox Code Playgroud)
当我尝试保存/更新现有项目时,出现以下错误:
未捕获错误:Firebase.update失败:第一个参数在路径/ $ key中包含无效键($ key).键必须是非空字符串,不能包含".","#","$","/","["或"]"
我已经尝试将原始对象放在第一个参数中,将完整的URL放在那里,几乎每个组合都可以想到.根据Observable的定义,_ref也应该在那里工作.我也尝试从要存储的数据中提取密钥,似乎没有任何工作.似乎唯一有效的方法是完全删除更新行并使用以下内容:
this.af.database.object('/houses/'+house.$key).set(house);
Run Code Online (Sandbox Code Playgroud)
我很好奇我应该放在第一个参数中,以便更新方法可以工作.
我正在使用Angular 2 rc-1,firebase 3.0.5和angularfire 2.0.0-beta.1
您的Angularfire版本比我的版本略长,但是对于您的保存方法,我认为您可以通过房子的密钥保存(house.$ key)以及包含更新数据的对象.
this._houses.update(house.$key, house);
Run Code Online (Sandbox Code Playgroud)
我认为通过传递'/ houses /'部分,错误被抛出,因为$ key不能以'/'开头.
| 归档时间: |
|
| 查看次数: |
8224 次 |
| 最近记录: |