如何将与数据库相关的代码移动到单独的服务?

时间:2017-08-31 13:47:37

标签: angular firebase ionic-framework firebase-realtime-database angularfire

我是Angular和Ionic的新手。我已经启动了一个简单的应用程序,可以将项目添加到Firebase Db中。到目前为止一切都很好。

我的组件ts文件中有两个方法:

add(item: string) {
  this.items.push({
    item: item
  })
  .catch(error => console.log('ERROR ' + error));
}

remove(key: string) {
  this.af.object( `/items/${key}`).remove()
    .catch(error => console.log('ERROR ' + error));
}

我想将上述方法移到单独的服务类中,因此我创建了一个新文件:

import {Injectable} from "@angular/core";

@Injectable()
export class ItemService {
   constructor() {
   }
}

但上述方法引用了items,它是一个FirebaseListObservable,af是一个注入控制器的AngularFireDatabase。

如何修改上述两种方法以便它们可以在服务中移动?

1 个答案:

答案 0 :(得分:0)

在您开始时使用可注射服务并定义这些方法。然后firebase db将返回一个observable,在您的服务中,您可以处理这些数据,然后再次返回可以订阅使用和进程视图的observable

@Injectable()
export class ItemService {
   constructor(private firebaseService: FirebaseService) {
   }

add(item: string) {

  // if firebase service returns observable, then map will precess and return observable whcih can be subscribed
  this.fireBaseService.get().map( (data) => {
     return this.items.push({
       item: data.item
    })
     .catch(error => console.log('ERROR ' + error));
  })
}


// same f0r remove
remove(key: string) {
   return this.af.object( `/items/${key}`).remove()
    .catch(error => console.log('ERROR ' + error));
}
}
// if I understood the question correctly