Angular 角度及;Firebase-如何使用服务或组件更新Firebase?

Angular 角度及;Firebase-如何使用服务或组件更新Firebase?,angular,firebase,angularfire,angular-services,Angular,Firebase,Angularfire,Angular Services,我所拥有的和我正在努力做的 我有一个服务,从firebase获得一个“专辑”列表 我有一个组件,它有一些输入字段来添加新项 作为firebase数据非规范化的一部分,我有两个节点需要更新。”“相册列表”和“相册详细信息” 我可以用下面的代码更新到firebase(不包括底部的firebase建议) 我知道我可能需要在我的示例中包含另一个服务。一个用于唱片集列表,一个用于唱片集摘要 问题 我看到了firebase中的一些示例代码,这些代码介绍了如何在多个位置更新代码,并为两个新节点创建一个新键

我所拥有的和我正在努力做的

  • 我有一个服务,从firebase获得一个“专辑”列表
  • 我有一个组件,它有一些输入字段来添加新项
  • 作为firebase数据非规范化的一部分,我有两个节点需要更新。”“相册列表”和“相册详细信息”
  • 我可以用下面的代码更新到firebase(不包括底部的firebase建议)
  • 我知道我可能需要在我的示例中包含另一个服务。一个用于唱片集列表,一个用于唱片集摘要
问题

  • 我看到了firebase中的一些示例代码,这些代码介绍了如何在多个位置更新代码,并为两个新节点创建一个新键。但是,我不知道在我当前的解决方案中,这段代码会用到哪里。它是在组件中还是在服务中
  • 如果代码适合一个组件,那么值得拥有一个服务吗?(如果它能为我服务,那就太好了)
  • 我已经在最底层加入了firebase建议的方法。如果知道如何将其集成到我当前的结构中,那将是一件非常棒的事情

    专辑服务

    从'@angular/core'导入{Injectable};
    从“./Album.model”导入{Album};
    从“angularfire2/database”导入{AngularFireDatabase,FirebaseListObservable};
    @可注射()
    导出类服务{
    专辑:FirebaseListObservable;
    构造函数(专用数据库:AngularFireDatabase){
    this.albums=database.list('albums');
    }
    getAlbums(){
    归还这个。相册;;
    }
    添加相册(新相册:相册){
    this.albums.push(newAlbum);
    }
    getAlbumById(albumId:string){
    返回此.database.object('/albums/'+albumId);
    }
    updateAlbum(localUpdatedAlbum){
    var albumEntryInFirebase=this.getAlbumById(localUpdateAlbum.$key);
    albumEntryInFirebase.update({
    标题:localUpdatedAlbum.title,
    艺术家:localUpdatedAlbum.artist,
    描述:localUpdatedAlbum.description
    });
    }
    
    }
    这在很大程度上取决于偏好和风格。尽管如此,在一个或多个服务中隔离特定于firebase的操作几乎总是一个更好的主意

    然而,我想知道定义许多方法(如
    addAlbum
    )是否真的值得。我个人的偏好是让服务只提供一个
    FirebaseListObservable
    ,并直接在组件中执行
    。push
    。可能有人认为需要额外的抽象层——例如,他们可能会例如,画一个场景,从Firebase切换到其他东西。然而,在实践中,这是不可能的,如果你决定这样做,这种简单的抽象层无论如何也不会对你有多大帮助

    作为次要的一点,如果您有一个专门用于相册的完整服务,我觉得没有必要在所有方法名称中重复“相册”一词。为什么不只是
    add()

    将新对象推送到一个节点上,然后使用相同的键在其他地方创建子节点的标准模式是

    this.albumService.list.push(albumData)
      .then(({key}) => this.albumService.summariesObject(key).update(stuff));
    

    换句话说,将数据推送到列表中,生成一个新的密钥,等待承诺通过包含密钥的快照来实现,然后用必要的数据更新另一个节点中具有该密钥的对象的
    FirebaseObjectObservable
    。最好尽量保持AngularFire范式,尽管允许在有些情况下,您必须退回到
    firebase.database().ref
    这类事情。

    很多这是一个偏好和风格的问题。尽管如此,在一个或多个服务中隔离firebase特定的操作几乎总是一个更好的主意

    然而,我想知道定义许多方法(如
    addAlbum
    )是否真的值得。我个人的偏好是让服务只提供一个
    FirebaseListObservable
    ,并直接在组件中执行
    。push
    。可能有人认为需要额外的抽象层——例如,他们可能会例如,画一个场景,从Firebase切换到其他东西。然而,在实践中,这是不可能的,如果你决定这样做,这种简单的抽象层无论如何也不会对你有多大帮助

    作为次要的一点,如果您有一个专门用于相册的完整服务,我觉得没有必要在所有方法名称中重复“相册”一词。为什么不只是
    add()

    将新对象推送到一个节点上,然后使用相同的键在其他地方创建子节点的标准模式是

    this.albumService.list.push(albumData)
      .then(({key}) => this.albumService.summariesObject(key).update(stuff));
    

    换句话说,将数据推送到列表中,生成一个新的密钥,等待承诺通过包含密钥的快照来实现,然后用必要的数据更新另一个节点中具有该密钥的对象的
    FirebaseObjectObservable
    。最好尽量保持AngularFire范式,尽管允许在有些情况下,你必须回到
    firebase.database().ref
    这类事情上。

    Hi Torazaburo-感谢你花时间回复。非常感谢。最好避开.firebase.database(主要是因为无论发生什么事,我总是得到“找不到firebase”).如果不太麻烦的话,你能给我举一个例子,说明你的代码如何与我上面的代码相匹配吗?(如前所述,我对这一切都很陌生,并试图让我了解所有部分是如何组合在一起的)假设在提交表单方法中,我想将标题、艺术家和描述推送到firebase albums节点,我想将标题和艺术家推送到albumsList firebase节点。但是albums>key/albumsList>key(其中两个键相同)另外,我更喜欢让服务提供数据并在组件中进行推送的想法