父组件与子组件连接时出现空白页
2022-10-22
217
我试图将变量从父组件传递到子组件。为此,我想使用
@Input()
方法
,但是当我尝试连接这两个组件时,整个网站都显示为空白页。简单地说,网站根本没有响应。
我将以下代码写入 parent.html
<app-test [id] = "id" [name]="name" [request]="request" [label]="label"></app-test>
然后,我将输入方法添加到 test.ts (child)
import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'app-test',
templateUrl: './test.component.html',
styleUrls: ['./test.component.css']
})
export class TestComponent implements OnInit {
@Input() id =-1;
@Input() name='';
@Input() request='';
@Input() label='';
parameters:any=[];
countryId:number=0;
apiList:any;
constructor() { }
ngOnInit(): void {
}
}
然后,我得到了一个空白页。开始时没有错误,但 30 秒后,我在检查器控制台中收到以下错误。你能帮助我吗?
Uncaught (in promise): RangeError: Maximum call stack size exceeded
RangeError: Maximum call stack size exceeded
编辑:我的父组件:
import { Component, OnInit } from '@angular/core';
import {MenuItem} from 'primeng/api';
import { TheDataOfEverythingService } from 'src/app/service/the-data-of-everything.service';
@Component({
selector: 'app-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.css']
})
export class HeaderComponent implements OnInit {
display:boolean = false;
items: MenuItem[]=[];
sidebarItems: MenuItem[]=[];
id:number=-1;
name:string='';
request:string='';
label:string='';
constructor(private service:TheDataOfEverythingService) { }
ngOnInit(): void {
this.getApiList();
this.items = [
{
label:'Home',
icon:'pi pi-fw pi-home',
routerLink: '/home'
},
{
label:'Contact',
icon:'pi pi-fw pi-phone',
routerLink: ['/contact'],
},
{
label:'Sign Up',
icon:'pi pi-fw pi-user-plus'
}
];
this.sidebarItems = [
{
label:'World',
icon:'pi pi-fw pi-globe',
items: []
},
]
}
apiList:MenuItem[]=[];
getApiList(){
this.service.getAllData("ApiList")
.subscribe(data=> {
this.apiList = data as MenuItem[];
let index;
this.apiList.forEach(item=>{
const newMenuItem: MenuItem ={
label: item.label,
//icon: item.icon,
routerLink: item.routerLink
}
if(newMenuItem.routerLink.includes('world')){
index = this.sidebarItems.findIndex(e=> e.label == "World")
this.sidebarItems[index].items?.push(newMenuItem);
}
})
});
}
}
编辑 2:我的父组件的 HTML:
<p-menubar [model]="items">
<ng-template pTemplate="start">
<a (click)="display = true">
<img src="https://upload.wikimedia.org/wikipedia/commons/f/f2/Noun_Data_2223266.svg" height="40" class="mr-2">
</a>
</ng-template>
<ng-template pTemplate="end">
<input type="text" pInputText placeholder="Search">
</ng-template>
</p-menubar>
<p-sidebar [(visible)]="display">
<p-panelMenu [model]="sidebarItems" [style]="{'width':'280px'}"></p-panelMenu>
</p-sidebar>
<app-test [id] = "id" [name]="name" [request]="request" [label]="label"></app-test>
2个回答
test.component.html 中有什么?如果它是空的,那么您将得到一个空白页。
以下可能是您的控制台错误的答案: https://stackoverflow.com/a/6095695/20063801
Benjamin Sicard
2022-10-23
好的,我找到了解决方案。我将父组件用作整个网站的标题。因此,我也将其导入到子组件中。因此,我认为,当我还使用
@Input()
方法时,我创建了某种循环。并且由于此站点没有响应。
您可以在下面的 HTML 中看到
<app-header></app-header>
行。当我删除此行时,站点开始正常工作。
<app-header></app-header>
<body>
<div class="text-center">
<div class="row">
<div class="col">
<h1 class="display-6">Test</h1>
</div>
</div>
</div>
</body>
因此,我将使用 @Output 方法代替此方法。
Tim's
2022-10-23