将firebase响应映射到类

Posted

技术标签:

【中文标题】将firebase响应映射到类【英文标题】:Map firebase response to class 【发布时间】:2017-08-30 21:16:55 【问题描述】:

我有以下课程:

import  Hobbies  from './hobbies';

export class Results 

constructor(
    $key: string,
    first_name: string,
    gender: string,
    intent: string,
    seeking: string,
    training: string,
    latitude: string,
    longitude: string,
    location_desc: string,
    state: string,
    hobbies: Hobbies[],
    cloud_Id: string) 



static fromJsonList(array): Results[] 
    return array.map(json => Results.fromJson(json))


static fromJson( $key, cloud_Id, first_name, gender, hobbies, intent, latitude, location_desc, longitude, seeking, state, training ): Results 

    debugger;
    return new Results(
        $key,
        first_name,
        gender,
        intent,
        seeking,
        training,
        latitude,
        longitude,
        location_desc,
        state,
        hobbies,
        cloud_Id);




我拨打Firebase 并检索状态与我输入的位置匹配的用户列表,如下所示:

getSearchResults(location: string): Observable<Results[]> 

        return this.af.database.list('/user/', 
            query: 
                orderByChild: 'state',
                equalTo: location
            
        ).map(Results.fromJsonList);

然后我.map回复(Results.fromJsonList);

static 方法fromJson 中,当我点击debugger 断点并检查传递的值时,它们都是正确的。

但是,当我在组件中记录结果时:

getSearchResultsComponent(gender: string, seeking: string, intent: string, location: string, hobbies?: string) 

  this.searchSubscription = this.searchService.getSearchResults(location).subscribe(results => 
   console.log(results);
  );


我看到以下内容:

而我应该看到两个用户的条目,即名字、性别、位置等。

有人可以解释为什么这个映射没有按照我想象的方式工作吗?

【问题讨论】:

@PankajParkar body.json is not a function 是我尝试您的建议时遇到的错误。我会指出,当我进入这个函数时,我可以看到 new Results() 被我传入的值填充... 【参考方案1】:

使所有Results 类成员public 可以通过对象实例访问。目前你只是将参数传递给Resultsconstructor,它们没有分配给任何类成员。

export class Results 

    constructor(
        public $key: string,
        public first_name: string,
        public gender: string,
        public intent: string,
        public seeking: string,
        public training: string,
        public latitude: string,
        public longitude: string,
        public location_desc: string,
        public state: string,
        public hobbies: Hobbies[],
        public cloud_Id: string
    )
    //other code

【讨论】:

@CodeRatchet 很高兴为您提供帮助,谢谢 :)

以上是关于将firebase响应映射到类的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从 Firebase 获取到哈希映射中?

尝试将 AlamoFire JSON 响应映射到类并接收“致命错误:在展开可选时意外发现 nil”

将 Firebase 身份验证用户映射到 Firestore 文档

如何将映射文件上传到 Firebase Crashlytics?

Flutter:如何将元素添加到 Firebase 数据库中的映射字段?

Firebase Documentsnapshot 映射到 Flutter 中的 Json 对象