Ionic 3. Typescript Map对象未保存到Firebase

时间:2017-06-28 06:08:39

标签: angular typescript firebase ionic-framework ionic3

我正在使用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不喜欢自定义的打字稿对象吗?

我应该在保存前以某种方式转换它们吗?我不应该这样做。

感谢任何帮助

2 个答案:

答案 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。

就是这样。