如何为Angular2组件创建动态模板URL?

如何为Angular2组件创建动态模板URL?,angular,angular2-template,Angular,Angular2 Template,我想根据从父组件传递的值加载组件templateUrl。我知道tt可以通过have@Input通过属性绑定传递到组件,我在下面给出了一个示例,其中myHtml将作为模板名传递 .但无法访问templateUrl函数中的@Input值。我认为templateUrl是在执行所有其他组件代码之后,通过请求HTML来评估的第一件事 像angular 1一样,它能够从属性传递一些值,然后我可以在templateUrl函数中使用该值作为参数,如下所示 templateUrl: function(eleme

我想根据从父组件传递的值加载组件
templateUrl
。我知道tt可以通过have
@Input
通过
属性绑定
传递到组件,我在下面给出了一个示例,其中
myHtml
将作为
模板名
传递

.但无法访问
templateUrl
函数中的
@Input
值。我认为
templateUrl
是在执行所有其他组件代码之后,通过请求HTML来评估的第一件事

像angular 1一样,它能够从属性传递一些值,然后我可以在
templateUrl
函数中使用该值作为参数,如下所示

templateUrl: function(element, attrs){
    //was getting value
    return '/app/templates/'+ attrs.myTemplateName + '.html'
}
但在Angular2中我不能做同样的事情,因为
templateUrl
强类型为
string
,所以它不将函数作为属性

有没有办法做到这一点?或者我错过了一些简单的事情

编辑

我已经看过我不想要的了。在参考答案中,它使用加载另一个组件的
DynamicComponentLoader
呈现DOM

这不是我想要的,因为在我的例子中,为不同的
templateUrl
创建新的独立组件没有意义


你知道我该如何实现这一点吗?

一直在努力解决类似的问题,但不幸的是,你无法做到这一点。组件模板在运行时编译。所以,基本上,我会制作一个编译其他子组件的组件(实际上我是这样做的)

DynamicComponentLoader
不推荐使用。您需要使用该类来加载主类中的其他组件,如下所示:

函数makeComponent(选择器、模板等)
{
@组件({选择器:选择器,模板:模板})
类FakeComponent{}
返回伪造组件;
}
@组件({…})
导出类MainCmp实现OnInit
{
//插入位置
@ViewChild('ViewChild',{read:ViewContainerRef})ViewChild:ViewContainerRef;
构造函数(专用编译器:ComponentResolver){}
//或者OnChanges,或者事件绑定..应该可以工作
恩戈尼尼特()
{
//在这里决定您的自定义逻辑,获取@Input,无论什么。。。
//你可以做一些自定义的动态组件。。。
让childCmp=makeComponent(自定义,填充,此处);
//编译然后插入到您的位置,由viewChild定义
this.compiler.resolveComponent(childCmp)
.then((compFactory:ComponentFactory)=>this.viewChild.createComponent(compFactory))
}
}

@MarkRajcok按照我在标记为重复答案中所做的方式,手动创建模板/
分配独立组件
。而且我不想创建一个新的
组件
,它有不同的
模板URL
,这听起来很重复。。如果我还遗漏了什么,请指导我。根据对另一个问题的回答,动态模板URL不受支持(这就是我最初关闭此问题的原因)。如果您想要动态模板,我相信您必须使用DynamicComponentLoader。看起来您正在尝试创建一个通用组件,它可以有许多不同的模板。这听起来像是DynamicComponent加载程序的工作,不是吗?请参阅@MarkRajcok correct,这似乎是一种解决方法,但需要有样板代码,尽管感谢您的解释。但是在链接的回答中,我看到对于每个
templateUrl
,我需要创建一个单独的
FakeComponent
,以便拥有不同的templateUrl,所以对于3个templateUrl,我需要创建三个
FakeComponent
,这对我来说听起来不太好(不需要的样板代码)。我认为这应该是一个更好的方式。我是不是想错了方向?@AngelAngel谢谢..在添加问题之前,我已经尝试过了通过引用链接给出的建议答案。。Angular2没有为
templateUrl
设置
函数的选项,因为
@Component
元数据
templateUrl
属性的强类型为
字符串
,我在问题中已经提到了这一点。谢谢:-)看起来angular2不再支持此选项??保持angular2最新更改的最新状态,此链接可能有帮助: