Angular 将TemplateRef推入对象
目标:将对Angular 将TemplateRef推入对象,angular,typescript,ng-template,Angular,Typescript,Ng Template,目标:将对ng模板的引用动态推送到对象中 挑战: 我正在为每个ng模板引用手动创建一个@ViewChild 我不知道如何将每个@ViewChild推入我的数据对象 //父TS组件 导出类型ITabData=object[]; @组成部分({ 选择器:“应用程序样式指南”, templateUrl:'./style-guide.component.html', 样式URL:['./style-guide.component.scss'] }) 导出类StyleGuideComponent实现OnI
ng模板的引用动态推送到对象中
挑战:
我正在为每个ng模板
引用手动创建一个@ViewChild
我不知道如何将每个@ViewChild
推入我的数据对象
//父TS组件
导出类型ITabData=object[];
@组成部分({
选择器:“应用程序样式指南”,
templateUrl:'./style-guide.component.html',
样式URL:['./style-guide.component.scss']
})
导出类StyleGuideComponent实现OnInit{
//这些是我正在引用的一些模板。但作为一点,我们可以有更多的模板。
@ViewChild('orderDetails')orderDetails:TemplateRef;
@ViewChild('anotherTemp')anotherTemp:TemplateRef;
//我要将所有ViewChild推送到的数据对象。
数据:ITabData=[];
构造函数(){
//我很确定这是不正确的,因为它不起作用
this.data.push({tabLabel:'newlabel',模板:this.orderDetails});
}
恩戈尼尼特(){
//这就是我想要的数据对象。
//但我希望它以编程的方式填充。
//当我在ngOnInit中硬编码时,它会显示在我的视图中。但是obvs不好。
此参数。数据=[
{
tabLabel:“第一标签”,
模板:this.orderDetails
},
{
tabLabel:“第二标签”,
模板:this.anotherTemp
}
];
}
}
我希望数据
对象动态填充一个新对象,如{tabLabel:“我的新标签”,template:“我的新模板”
如果这是不可能的,建议将不胜感激
谢谢大家!你们就快到了
问题在于,您试图在页面中创建ViewChild引用之前,将其推入构造函数()
中的数组中,因此选择器还不能选择任何内容
相反,在中执行,就像手动操作一样,这确实有效
比如:
// Illustration only, you can delete empty constructors
constructor () {}
ngOnInit() {
this.data.push({ tabLabel: 'newlabel', template: this.orderDetails });
}
一般的经验法则是:Angular中的构造函数()
基本上只用于将变量初始化为已知(静态)值或注入类引用(如服务)。您不能在构造函数中触摸DOM,因为在运行时模板尚未呈现。这就是生命周期挂钩的用途
顺便说一句:与其手动维护对象数组,也许会有用。您就快到了
问题在于,您试图在页面中创建ViewChild引用之前,将其推入构造函数()
中的数组中,因此选择器还不能选择任何内容
相反,在中执行,就像手动操作一样,这确实有效
比如:
// Illustration only, you can delete empty constructors
constructor () {}
ngOnInit() {
this.data.push({ tabLabel: 'newlabel', template: this.orderDetails });
}
一般的经验法则是:Angular中的构造函数()
基本上只用于将变量初始化为已知(静态)值或注入类引用(如服务)。您不能在构造函数中触摸DOM,因为在运行时模板尚未呈现。这就是生命周期挂钩的用途
作为旁注:与其手动维护该对象数组,不如使用它。谢谢!是的,移动this.data.push({tabLabel:'newlabel',template:this.orderDetails});
进入ngOnInit
确实将新对象推入了数据
数组中。但是有没有一种方法可以将新对象从这个.data.push()中手动写入
?@LailaAli否,因为该对象是需要这些特定字段的类型
,所以您需要声明它们。因此您正在推送该对象(这是一个)因此,如果我没有类型
,或者没有将其作为界面
,那么我仍然需要手动输入每个对象吗?因此,按照目前的情况,如果我有100个新选项卡和模板,我将不得不单独添加每个对象
。@LailaAli是的,这就是我建议查看ViewChildren的原因
(复数),它基于查询为您创建一个elementref
数组。您可以使用该数组而不是ITabData[]
。问题是架构首先需要有数据
数组。这是为了什么?你真的有一个包含数百个选项卡的页面吗?很抱歉,我忽略了你最初评论中关于@ViewChildren
的最后一行。我将阅读更多内容!我正在创建一个可重用的选项卡组件
>。并且父级决定有多少个选项卡
,以及哪些模板
与哪些选项卡一起使用。谢谢!是的,移动this.data.push({tabLabel:'newlabel',template:this.orderDetails});
进入ngOnInit
确实将新对象推入了数据
数组中。但是有没有一种方法可以将新对象从这个.data.push()中手动写入
?@LailaAli否,因为该对象是需要这些特定字段的类型
,所以您需要声明它们。因此您正在推送该对象(这是一个)因此,如果我没有类型
,或者没有将其作为界面
,那么我仍然需要手动输入每个对象吗?因此,按照目前的情况,如果我有100个新选项卡和模板,我将不得不单独添加每个对象
。@LailaAli是的,这就是我建议查看ViewChildren的原因
(复数),它基于查询为您创建一个ElementRefs
数组。也许您可以使用该数组而不是ITabData[]
。问题是架构首先需要有数据
数组。它用于什么?您真的有一个包含数百个选项卡的页面吗?对不起,我很抱歉