Firebase:使用AngularFire2更新列表绑定中的项目

时间:2017-03-23 07:05:05

标签: firebase angularfire2

根据angularfire2文档,如果您不想更新列表中的项目,可以执行以下操作:

const items = af.database.list('/items');
// to get a key, check the Example app below
items.update('key-of-some-data', { size: newSize });

但是可以更新列表中的项目,而不必像这样指定对象的键值:

items.update('key-of-some-data', item);

angularfire中可以这样做:

<li ng-repeat="item in list">
<input type="text" ng-model="item.title" ng-change="list.$save(item)" />
</li>

感谢您抽出宝贵时间阅读此问题:)

1 个答案:

答案 0 :(得分:6)

update的实施看起来像this

update(item: FirebaseOperation, value: Object): firebase.Promise<void> {
  return this._checkOperationCases(item, {
    stringCase: () => this.$ref.ref.child(<string>item).update(value),
    firebaseCase: () => (<firebase.database.Reference>item).update(value),
    snapshotCase: () => (<firebase.database.DataSnapshot>item).ref.update(value),
    unwrappedSnapshotCase: () => this.$ref.ref.child((<AFUnwrappedDataSnapshot>item).$key).update(value)
  });
}

因此可以通过以下方式致电update

  • 使用string键和值:

    const items = af.database.list('/items');
    items.update('key-of-some-data', { size: newSize });
    
  • 使用Firebase参考号和值:

    const items = af.database.list('/items');
    const ref = items.$ref.ref;
    items.update(ref.child('key-of-some-data'), { size: newSize });
    
  • 使用Firebase快照和值:

    const items = af.database.list('/items', { preserveSnapshot: true });
    items.subscribe(list => {
      const snapshot = list[0];
      items.update(snapshot, { size: newSize });
    });
    
  • 使用未包装的列表项和值:

    const items = af.database.list('/items');
    items.subscribe(list => {
      const item = list[0];
      items.update(item, { size: newSize });
    });
    

(调用subscribe上方的片段仅用于说明快照和未展开的项目是list可观察的发布值。使用此类subscribe来执行更新毫无意义。)

AngularFire2目前正在进行一些重构和重新安排,以准备候选版本。如果您有一个上述选项都不合适的用例,现在是时候发言了。讨论是here。但是,对于特定的内容,您应该创建new issue