我正在使用Ionic 3框架。
我正在尝试将对象保存到Firebase,但并未保存所有属性。
保存字符串属性,但不保存Map和自定义对象(Event)。
以下是具有我想要保存的属性的对象:
=============================================== ==============
export class Room extends WorldObject {
private entityList: Array<Entity>;
private itemList: Array<Item>;
private directionMap: Map<string, number>;
private onEnterEvent: Event;
private onExitEvent: Event;
private actionEventMap: Map<string, Map<string, Event>>;
=============================================== ==============
=============================================== ==============
export class Event {
private actionScript: string;
private message: string;
=============================================== ==============
因此,同样保存字符串和数组属性,但“Map”或“Event”类型的属性不会保存到firebase。
可能是什么问题?
Firebase不喜欢自定义的打字稿对象吗?
我应该在保存前以某种方式转换它们吗?我不应该这样做。
感谢任何帮助
答案 0 :(得分:0)
对象应该提供toString()
函数来将对象序列化为字符串。似乎他在打字稿中Map
没有这样的方法。
答案 1 :(得分:0)
所以我找到了一个解决方法。我讨厌变通办法!因为我是最佳实践的忠实粉丝。所以,这里......
由于Firebase尚不支持,因此我没有使用Typescript Map类型,而是使用其他方式创建了一个地图对象,在此引用:
How do I dynamically assign properties to an object in TypeScript?
export class Room extends WorldObject {
private entityList: Array<Entity>;
private itemList: Array<Item>;
private directionMap: {[key:string]: number};
private onEnterEvent: Event;
private onExitEvent: Event;
private actionEventMap: {[key:string]: {[key:string]: Event}};
而不是使用
let newRoom = Map<string, number>
newRoom.set('north', 1);
我用过:
let newRoom: {[key:string]: number} = {}
newRoom['north'] = 1;
我应该把它封装在一个类中。由于最佳实践很棒。
结果,我能够将数据保存到firebase。
就是这样。