如何使用navCtrl与从LocalStorage检索的类名

时间:2018-06-16 05:56:42

标签: angular typescript ionic3

我正在开发一个离子3的游戏,我的类名如下:level1,level2,level3等...我正在使用LocalStorage来保存用户达到的级别。

代码如下:

import { level1 } from '../levels/level';
import { level2 } from '../levels/level';
import { level3 } from '../levels/level';
import { Storage } from '@ionic/Storage';

...

storage.get('levelNumber').then((val) => {

if(val == null)
{
   this.levelNbr = level1
}
else
{
   this.levelNbr = val
}

this.navCtrl.push(this.levelNbr)
//when the class name is retrieved from storage it and placed in val it is then 
//assigned to levelNbr, so now levelNbr should contain the class name and
//then pushed in navCtrl.

在LocalStorage中保存关卡的代码如下:

this.storage.set('levelNumber', "level2")
//does not work with navCtrl.push() as "level2" is a string
this.storage.set('levelNumber', level2)
//does not work as it throws cannot clone error

这里的问题是,当我将类名保存为LocalStorage中的字符串时,当我检索它时,它在navCtrl.push中不起作用,而是它必须是我猜的类类型。并将其保存在LocalStorage中,因为类会引发错误"无法克隆"。

如何动态检查用户在LocalStorage中达到的级别,然后自动推送课程级别?

我想通过简单地做一个切换案例来解决这个问题,但是它不适用于100个级别。

谢谢

1 个答案:

答案 0 :(得分:2)

有很多方法可以巧妙地将内容导入到import * as levels from '../levels/level';之类的变量中,但如果您不想触摸我的导入,我就会

const levels: any = { level1, level2, level3 }; //"any" because I'm lazy.

级别[" level1"]现在将为您提供导入。

我想你的情景会是这样的:

storage.get('levelNumber').then((val) => {
    this.levelNbr = levels[val];
    ...
});

我还没有在这里测试任何东西。使用含有一粒盐的代码。 (对不起,我已经说过我很懒。)