Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何转换a“;字符串”;值为“;类型”;角度为2 TS_Angularjs_Angular_Typescript - Fatal编程技术网

Angularjs 如何转换a“;字符串”;值为“;类型”;角度为2 TS

Angularjs 如何转换a“;字符串”;值为“;类型”;角度为2 TS,angularjs,angular,typescript,Angularjs,Angular,Typescript,这是我当前的对象,Home指的是我的导入 import { Home } from '../home/home'; arr = [ { name: "Home", root: "Home", icon: "calc" } ]; 这就是我想要实现的目标: import { Home } from '../home/home'; arr = [ { name: "Home", root: Home, icon: "calc" }

这是我当前的对象,Home指的是我的导入

import { Home } from '../home/home';


  arr = [
      { name: "Home", root: "Home", icon: "calc" }
    ];
这就是我想要实现的目标:

 import { Home } from '../home/home';
 arr = [
          { name: "Home", root: Home, icon: "calc" }
        ];
我收到一个错误,因为“Home”是一个字符串。eval()有效,但我正在寻找替代方案

工作代码:

 for (var i = 0; i < arr.length; i++) { 
      arr[i].root = eval(arr[i].root);
    }
for(var i=0;i
看来这就是你的处境:
您正在从服务器接收json,该服务器在某些字段中包含您需要在运行时使用的类的名称。
名称是字符串,您需要获取它们引用的类

确实可以在使用时使用
eval
,但要考虑到建议避免使用
eval
,尤其是在从远程接收的数据上使用时,例如:

eval()是一个危险的函数,它执行传递的代码 以调用方的权限。如果使用字符串运行eval() 这可能会受到恶意方的影响,您最终可能会运行 用户计算机上具有您的权限的恶意代码 网页/分机。更重要的是,第三方代码可以看到 调用eval()的作用域,这可能导致可能的攻击 以类似功能不易受影响的方式

如果您仍然想使用它,那么继续,但另一种选择是拥有这些类的注册表:

const REGISTRY = {} as { [name: string]: { new(): any };

...
class Home { ... }
REGISTRY["Home"] = Home;
然后:

for (var i = 0; i < arr.length; i++) { 
    arr[i].root = REGISTRY[arr[i].root];
}
for(var i=0;i
另一件事是,这种方法在从服务器和客户端返回的数据之间创建了耦合。
您始终需要确保在json中返回的类名在客户端具有相应的实现。
如果在客户端重命名该类,还需要记住在服务器上对其进行更改。

最好只返回数据,然后让客户自行决定如何操作并找到所需的类。

这似乎就是您的情况:
您正在从服务器接收json,该服务器在某些字段中包含您需要在运行时使用的类的名称。
名称是字符串,您需要获取它们引用的类

确实可以在使用时使用
eval
,但要考虑到建议避免使用
eval
,尤其是在从远程接收的数据上使用时,例如:

eval()是一个危险的函数,它执行传递的代码 以调用方的权限。如果使用字符串运行eval() 这可能会受到恶意方的影响,您最终可能会运行 用户计算机上具有您的权限的恶意代码 网页/分机。更重要的是,第三方代码可以看到 调用eval()的作用域,这可能导致可能的攻击 以类似功能不易受影响的方式

如果您仍然想使用它,那么继续,但另一种选择是拥有这些类的注册表:

const REGISTRY = {} as { [name: string]: { new(): any };

...
class Home { ... }
REGISTRY["Home"] = Home;
然后:

for (var i = 0; i < arr.length; i++) { 
    arr[i].root = REGISTRY[arr[i].root];
}
for(var i=0;i
另一件事是,这种方法在从服务器和客户端返回的数据之间创建了耦合。
您始终需要确保在json中返回的类名在客户端具有相应的实现。
如果在客户端重命名该类,还需要记住在服务器上对其进行更改。

最好只返回数据,然后让客户机自己决定如何操作并找到所需的类。

您正在寻找
root:new Home()
?在创建或注入实例之前,您无法引用导入引用。请在此处提供
Home
对象(
'../Home/Home.ts'
)的代码。您试图做什么?确切的错误消息是什么?什么代码导致了错误?不知道那是什么意思。我认为你应该详细阐述一下你试图实现的目标。至少我听不懂你的问题。你在找
root:newhome()
?在创建或注入实例之前,您无法引用导入引用。请在此处提供
Home
对象(
'../Home/Home.ts'
)的代码。您试图做什么?确切的错误消息是什么?什么代码导致了错误?不知道那是什么意思。我认为你应该详细阐述一下你试图实现的目标。至少我听不懂你的问题。谢谢尼赞,这很有道理。尼赞,这很有道理