Angular 2 Firebase - 如何实现SQL行为?

时间:2017-06-02 00:15:18

标签: angular firebase firebase-realtime-database angularfire2

我知道可以将一个对象存储在另一个对象中。但我不想使用这种结构。

例如,我希望有以下结构:

{
    courses:
        01: {
            courseName: "English"
        },
        02: {
            courseName: "German"
        }
    teachers:
        01: {
            lastname: "smith",
            forename: "john"
        },
        02: {
            lastname: "schmidt",
            forename: "john"
        }
    coursePerTeacher:
        01: {
            courseID: "01",
            teacherID: "02"
        },
        02: {
            courseID: "02",
            teacherID: "02"
        },
        03: {
            courseID: "01",
            teacherID: "01"
        }
}

每个节点应该像SQL中的表一样。

我使用Angular 2中的angularfire2来访问firebase数据库。 第一个问题是我应该创建和使用多少服务?我想我可以创建一个courseService,一个teacherService。 coursePerTeacherService有用吗?或者只使用一种不同方法的服务更好? 我的问题不是在每个服务中创建一个CRUD。但是我怎样才能创建一个页面,告诉我John Schmidt老师能够教授德语和英语。约翰史密斯只教英语。

我的问题是我目前的成功是我只能显示存储在coursePerTeacher节点中的内容。但是从这一点来说,我想由老师总结并展示引用ID背后的内容。换句话说就是名字。

我真的不知道如何编码。组件类中的部分是什么以及服务类中的部分是什么?

接下来我可以对这种结构的行为做些什么?

{
    categories:
        01: {
            cat_name: "java programming",
            cat_description: "here is everything you need to know about java"
        },
        02: {
            cat_name: "html",
            cat_description: "...."
        }
    topics:
        01: {
            topic_subject: "need help in java",
            topic_date: "08/01/2017",
            topic_cat: "01",
            topic_by: "01"
        },
    replies:
        01: {
            reply_content: "java doesn't work anymore?",
            reply_date: "08/01/2017",
            reply_topic: "01",
            reply_by: "01",
        },
        02: {
            reply_content: "what's your specific question?",
            reply_date: "08/01/2017",
            reply_topic: "01",
            reply_by: "02",
        },
    users:
        01: {
            username: "newbie",
        }
        02: {
            username: "proCoder",
        }
}

我没有一个真实的例子。我希望我的意思是可以理解的,并且结构中没有错误。

如果引用不在特定节点内,我应该如何工作?如果它出现在每个物体中,我应该如何工作?

我真的遇到了麻烦。详细的教程或简单的例子(组件和服务)会非常好。

我之前从未使用过NoSQL-Databases。

对不起英语不好,在我的国家,它是在半夜。

1 个答案:

答案 0 :(得分:0)

对于来自sql背景的Firebase问题,此播放列表会为您提供很多帮助https://www.youtube.com/watch?v=WacqhiI-g_o&list=PLl-K7zZEsYLlP-k-RKFa7RyNPa9_wCH2s

大多数情况下,您只需在组件中插入firebase服务并在那里执行逻辑。如果您需要额外的服务(不是Firebase)或者不想复制您的代码,那么最好只拥有一个TeacherService,然后取决于您是否想要延迟加载您创建课程服务的课程。如果在同一个屏幕中显示教师和课程,您可以在一个服务中完成所有操作。因此,要恢复它,最好在您的观看后为您的服务建模。

如果您在服务中使用firebase,您可以执行以下操作: 从'angularfire2'导入{AngularFire,FirebaseListObservable}; 从'@ angular / core'导入{Injectable};

@Injectable()
export class TeacherService{
  constructor(private af: AngularFire) {}

  getTeachers(): FirebaseListObservable {
    return this.af.database.list('/teachers');
  }

  addTeacher(teacher: string) {
    return this.af.database.list('/teachers').push(teacher);
  }

  deleteTeacher(teacher: any) {
    return this.af.database.list('/teachers').remove(teacher)
  }

getCourses(teacher:any){
    return this.af.database.list('/teachers/'+teacher.key+'/courses') //this depends on how you structure your db
}