动态读取变量

时间:2019-07-03 09:56:09

标签: json angular typescript

我有一个json文件tabs.json,其中有格式

{
"test":[
{
        "displayName": "1",
        "clickEvent": "open()",
        "hiddenProperty": "dashboard.privilege.ADDRESS_BOOK_ADMINISTRATE",
        "value": false
    },
{
        "displayName": "2",
        "clickEvent": "route()",
        "hiddenProperty": "dashboard.privilege.ADDRESS",
        "value": false
    },
]
}

在此文件open()中,route()是test.component.ts文件中存在的单击事件...要调用它们,我正在使用

var data = tabs.json;
data.test.forEach((tab) => {
eval('this.' + tab.clickEvent);
});

这工作得很好,可以转到函数open(),route()等

类似地,“ dashd.privilege.ADDRESS_BOOK_ADMINISTRATE”,“ dashboard.privilege.ADDRESS”等“ hiddenProperty”的值也是test.component.ts文件中的变量。

我正在尝试获取它们的价值

尝试过 示例1:

var data = tabs.json;
data.test.forEach((tab) => {
eval('this.' + tab.hiddenProperty);
});

结果:无法读取未定义的属性“仪表板”

示例2:

var data = tabs.json;
data.test.forEach((tab) => {
eval(tab.hiddenProperty);
});

结果:未定义仪表板

Example3:

var data = tabs.json;
data.test.forEach((tab) => {
eval.call(this, tab.hiddenProperty);
});

结果:未定义仪表板

您能建议我如何访问变量中存在的变量的值

1 个答案:

答案 0 :(得分:0)

Json是一种数据格式,它不包含可执行代码,您只需在json中定义此结构即可:

"test":[
{
        "displayName": "1",
        "clickEvent": "0", // 0 for open and 1 for route
        "hiddenProperty": "0"// same thing 0 for one ts variable and 1 for the other,
        "value": false
    }
}

然后您可以将此代码放在ts文件中:

data.test.forEach((tab) => {
if (tab.clickEvent){
this.route()
}else{
this.open()
}

});

希望变量对我有帮助;)