我想在ionic 2应用程序中创建一个侧边菜单,其中页面导航组件放在一个外部json文件中,该文件是在menuService.getMenu函数的帮助下获取的。
MY JSON结构:
"menu":[
{
"title":"Grid",
"component":"GridPage"
}
]
我的Ts:
this.menuService.getMenu().then((menu) => {
this.menu = menu;
});
openPage(menu) {
console.log("menu", menu.component);
nav.setRoot(menu.component);
}
控制台日志打印字符串GridPage。我尝试使用Type作为Type(menu.component)进行转换。但我在控制台中的结果是一个具有匿名名称的函数。有人请帮助我将json字符串转换为组件" Type"导航工作。
答案 0 :(得分:10)
我想有一种方法可以通过字符串获取类的类型,但我不知道(我不使用TS)。
是一个简单的解决方法创建从字符串到类型
的地图classes = {
'MyClass1': MyClass1,
'MyClass2': MyClass2,
'Grid': Grid
}
然后只查看类型
class['Grid']
缺点是你需要提前知道所有支持的类。
答案 1 :(得分:4)
我不深入了解Angular 2,但在结构良好的应用程序中,使用字符串获取Type非常简单明了,如果您知道给定类型的完全限定名称:
let typeName = "GridPage";
let ComponentType = MyApp.Components[typeName];
如果您收到以下类型错误:
对象类型的索引签名隐式具有“任何”类型。
...然后你需要输入前面的命名空间(对象)。在这种情况下,我更喜欢断言为any
,因为它比为基于字符串的索引签名定义内联接口要短,并且您实际上不会丢失任何类型安全性:
let ComponentType = (MyApp.Components as any)[typeName];
此外,这种方法也适用于模块:
import * as Components from "./components";
let ComponentType = (Components as any)[typeName];