【问题标题】:Struggling to get model + observable + firebase to work努力让模型+可观察+火力工作
【发布时间】:2021-08-18 20:40:14
【问题描述】:

我有一个看起来像这样的数据模型(总结,不是完整的东西):

export class Magus {
  public characterid: string;
  public playerUID: string;
  public covenantID: string;
  public info: Info;
  public infoMagus: InfoMagus;
  public virtues: Merit[];
  public flaws: Merit[];
  public characteristics: Characteristics;
  public abilities: Abilities[];
  public arts: Arts;
  public spells: Spells[];
  public labtotals: LabTotals;
  public enchantedDevice: EnchantedDevice[];
  public familiar: Familiar;
  public activities: Activities[];
  public armour: Armour;
  public weapons: Weapons[];
  public equipment: Equipment[];
  public personality: Personality[];
  public charHistory: CharHistory;
  public notes: Notes[];
  public agingWarping: AgingWarping;
  public reputation: Reputation[];
  public vis: Vis[];
  public seasonalActivities: SeasonalActivities[];
  public journal: Journal[];
  public chargen: Chargen;
  public playerChar: boolean;

  constructor(characterid: string, playerUID: string, covenantID: string, info: Info, infoMagus: InfoMagus, virtues: Merit[], flaws: Merit[], characteristics: Characteristics, abilities: Abilities[], arts: Arts, spells: Spells[],
    labtotals: LabTotals, enchantedDevice: EnchantedDevice[], familiar: Familiar, activities: Activities[], armour: Armour, weapons: Weapons[], equipment: Equipment[], personality: Personality[], charHistory: CharHistory,
    notes: Notes[], agingWarping: AgingWarping, reputation: Reputation[], vis: Vis[], seasonalActivities: SeasonalActivities[], journal: Journal[], chargen: Chargen, playerChar: boolean) {
    this.characterid = characterid;
    this.playerUID = playerUID;
    this.covenantID = covenantID;
    this.info = info;
    this.infoMagus = infoMagus;
    this.virtues = virtues;
    this.flaws = flaws;
    this.characteristics = characteristics;
    this.abilities = abilities;
    this.arts = arts;
    this.spells = spells;
    this.labtotals = labtotals;
    this.enchantedDevice = enchantedDevice;
    this.familiar = familiar;
    this.activities = activities;
    this.armour = armour;
    this.weapons = weapons;
    this.equipment = equipment;
    this.personality = personality;
    this.charHistory = charHistory;
    this.notes = notes;
    this.agingWarping = agingWarping;
    this.reputation = reputation;
    this.vis = vis;
    this.seasonalActivities = seasonalActivities;
    this.journal = journal;
    this.chargen = chargen;
    this.playerChar = playerChar;
  }
}

(其他课程也有,但不包括这些,否则这将变成一篇非常大的文章)

在我的主组件中,我可以使用以下方法成功返回所有魔法字符:

magi: Magus[] = [];    

getMagi() {
   this.subscription = this.characterDataService.getMages()
   .subscribe(magi => this.magi = magi);
}

它调用服务文件中的一个函数:

getMages() {
  this.magiCollection = this.firestore.collection<Magus>('magi');
  this.magi = this.magiCollection.valueChanges();
  return this.magi
}

问题在于,当我想使用字符 uuid(我的 firestore DB 中有一个文档字段)获取一个字符的完整详细信息时。以下方法不起作用:

magus: Observable<Magus>;

getCharacter() {
    if (this.collection === 'magi') {
      this.magus = this.characterDataService.getCharacterDetail(this.charid, this.collection)
      .subscribe(magi => this.magus = magi);
    }
  }

在服务中:

getCharacterDetail (charID: string, collection: string) {
    this.magiCollection = this.firestore.collection<Magus>(collection, ref => ref.where('characterid', '==', charID));
    return this.magiCollection.valueChanges();
  }

TLDR:我要做的是从 Firestore 集合中获取数据并将其映射回我的数据模型 (Magus),以便我可以显示角色详细信息、更新它等。这就是我想要的原因它作为一个可观察的,以便计算可以动态更新。我当前使用 getCharacter 的错误是:“订阅”类型缺少“可观察”类型中的以下属性:_isScalar、源、运算符、提升和 6 more.ts(2740)

但即使我改变它,我最终也会得到 Observable' is notassignable to type 'Observable.显然有问题,但我不知道如何解决。

【问题讨论】:

  • 我还想知道角色细节是否应该是一个 BehaviorSubject,因为我需要跨多个组件的相同可观察细节?

标签: angular google-cloud-firestore angularfire2


【解决方案1】:

通过查看您的代码,您已经订阅了调用,并且在您说您希望 this.magus 等于您的对象 magi this.magus 是一种可观察的类型,因此您需要说 this.magus = Observable.of(magi)

长话短说,您需要确保为this.magus 分配了Magus 的可观察类型

【讨论】:

    猜你喜欢
    • 2019-04-24
    • 2012-01-15
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-20
    • 2015-12-31
    • 2021-09-16
    • 1970-01-01
    相关资源
    最近更新 更多