1

当我有数据模型引用(id)到另一个对象时,我不知道如何从firestore获取数据,例如像这样

City {name:      string;
       countryId: string; //primary key to another object in database
}
Country {
      name: string;
}

我正在使用 AngularFire 5。

在我获取城市后,我想获取国家,我想将 country.name 分配给 city.countryId,我想返回加入的对象城市。
我为此提供了服务,因为我想从代码中的多个位置获取这些数据。

@Injectable()
export class CityService implements  OnInit {
  city: City;

  constructor(
    private dataFetch: FireStoreService) { }
  ngOnInit() {}

  getCity(ref: string): City {
    this.dataFetch.getDataDoc(ref).subscribe((_city: City) => {
      this.dataFetch.getDataDoc(_city.countryId)
        .subscribe((country: Country) => {
          _city.countryId = country.name;
          this.city = _city;
        });
    });
    return this.city;
  }
}

是的,我知道这行不通,因为它是异步任务,我已经阅读了很多文章,但我仍然无法弄清楚。所以我不知道如何获取一些对象,然后从该对象中获取引用并返回连接对象(没有引用但有正确的数据)。
这是我的城市组成部分。

 @Component({
      selector: 'app-detail-city',
      template: `
        <p> detail-city works! </p>
        <p> Name : {{ city.name }} </p>
        <p> Country : {{ city.countryId }} </p>
        <p> ID : {{ city.id }} </p>
      `,
      styleUrls: ['./detail-city.component.css']
    })
    export class DetailCityComponent implements OnInit {
      city: City;
      root: string;

      constructor(
        private route: ActivatedRoute,
        private cityService: CityService) {
        this.route.params.subscribe(
          (params: Params) => {
            this.root = params['root']+'/'+params['id'];

            this.city = cityService.getCity(this.root);

          });
      }
      ngOnInit() {}
    }
4

1 回答 1

2

所以我最终设法解决了这个问题。这是来自servis的代码。

 getCity(ref: string): Observable<City> {
    return this.dataFetch.getDocument(ref)
      .switchMap((res: City) => {
        return this.dataFetch.getDocument(res.countryId)
          .map((country: Country) => {
            return new City(
              res.id,
              res.name,
              country.name
            );
          });
      });
  }

然后你可以在你的组件中订阅这个 observable 或者使用异步管道。另外,我找到了有用的链接,其中描述了如何在 FireStore 中使用参考和地理类型。

于 2018-02-01T22:49:50.093 回答