努力让模型+可观察+火力点工作
Struggling to get model + observable + firebase to work
我有一个看起来像这样的数据模型(摘要,不是全部):
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;
}
}
(其他类也有,但排除那些否则这将变成一篇非常大的文章)
在我的主页组件中,我可以成功 return 所有魔法角色使用:
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 数据库中有一个文档字段)获取一个字符的完整详细信息时。以下无效:
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 错误是:类型 'Subscription' 缺少类型 'Observable' 中的以下属性:_isScalar、源、运算符、提升和 6 more.ts(2740)
但即使我更改它,我最终也会得到 Observable' is not assignable to type 'Observable.明显有问题,但我不知道如何解决。
通过查看您的代码,您已经订阅了调用,并且在您的声明中您希望 this.magus
等于您的对象 magi
但 this.magus
是一种可观察对象,所以你需要说 this.magus = Observable.of(magi)
长话短说,您需要确保 this.magus
被分配了 Magus
的可观察类型
我有一个看起来像这样的数据模型(摘要,不是全部):
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;
}
}
(其他类也有,但排除那些否则这将变成一篇非常大的文章)
在我的主页组件中,我可以成功 return 所有魔法角色使用:
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 数据库中有一个文档字段)获取一个字符的完整详细信息时。以下无效:
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 错误是:类型 'Subscription' 缺少类型 'Observable' 中的以下属性:_isScalar、源、运算符、提升和 6 more.ts(2740)
但即使我更改它,我最终也会得到 Observable
通过查看您的代码,您已经订阅了调用,并且在您的声明中您希望 this.magus
等于您的对象 magi
但 this.magus
是一种可观察对象,所以你需要说 this.magus = Observable.of(magi)
长话短说,您需要确保 this.magus
被分配了 Magus