Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.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
Javascript 导入组件的Angular 7动态变量名称_Javascript_Angular_Typescript - Fatal编程技术网

Javascript 导入组件的Angular 7动态变量名称

Javascript 导入组件的Angular 7动态变量名称,javascript,angular,typescript,Javascript,Angular,Typescript,在一个简单的angular应用程序中,我创建了一个测试组件,如下所示: test.component.ts 从'@angular/core'导入{Component}; @组成部分({ 选择器:“测试”, 模板:`我是一个测试', 样式:[`h1{font-family:Lato;}`] }) 导出类TestComponent{ } 我在我的应用程序模块中导入的内容如下: export class ComponentMapping { private TestComponent = T

在一个简单的angular应用程序中,我创建了一个测试组件,如下所示:

test.component.ts

从'@angular/core'导入{Component};
@组成部分({
选择器:“测试”,
模板:`我是一个测试',
样式:[`h1{font-family:Lato;}`]
})
导出类TestComponent{
}
我在我的应用程序模块中导入的内容如下:

export class ComponentMapping
{
    private TestComponent = TestComponent;
}
app.component.ts

从'@angular/core'导入{Component};
从“./test.component”导入{TestComponent};
@组成部分({
选择器:“我的应用程序”,
templateUrl:“./app.component.html”,
样式URL:['./app.component.css']
})
导出类AppComponent{
名称='角度';
公共TestComponent=TestComponent;
dynamic=“Test”;
构造函数(){
log(TestComponent);
log(this.TestComponent);
log(这个['TestComponent']);
log(这个[this.dynamic+'Component']);
}
}
通过本主题的帮助,我能够动态地获取组件名称(在实际示例中,动态变量根据API调用响应而变化)

我的问题是,是否有任何方法可以实现相同的结果,而不必将组件作为局部类变量传递,从而避免这一行

publictestcomponent=TestComponent

如果没有this关键字,动态变量不起作用,它会给我一个错误

console.log([this.dynamic+'Component'])

我尝试在stackblitz()中添加代码,但似乎无法共享它(),但将这两个文件复制到一个新的空stackbitz()中以进行复制非常简单


提前感谢。

首先,您需要理解以下内容

this['TestComponent']
在javascript中,可以通过两种方式访问类属性<代码>类.属性
类[“属性”]
。因此,当您编写
this[“TestProperty”]
时,您实际上是在说,Get
AppComponentInstance.TestProperty

So
console.log([this.dynamic+'Component'])
就像写
.TextComponent
一样,左侧没有任何内容

基于此,你到底想要实现什么?获取类型或该类型的实例?您想使用该类型做什么

但您可以做的是在某个地方声明另一个全局类,并在其中包含这些属性。检查

您的json可以是这样的:

export class ComponentMapping
{
    private TestComponent = TestComponent;
}

然后在课堂上相应地访问测试组件。

感谢您解释第一部分。我的目标是动态添加所需的组件,这取决于API调用的响应。我有两个组件,让我们调用它们
“Component1”
“Component2”
,因此我的API调用返回
type=1
,然后我想使用该类型动态获取组件的名称
“component”+type
。因此,我觉得使用const的全局变量解决方案不适用。为此,请尝试使用指令和组件工厂的官方方法。让我知道这是否适合你。这个解决方案有一个声明的组件类型数组,它是根据一个值选择的,在您的后端。这正是我所遵循的,然后我将继续使用参数,我将再试一次,并让您知道它是否有效。再次感谢。我最终使用了一个新的服务(如示例),它返回一个具有键值对的对象,键值表示从API返回的类型(1,2…)。再次感谢您的评论,这本书指引了我正确的方向。:)干杯很高兴我能帮忙!