gpt4 book ai didi

javascript - Angular 组件构造函数被调用两次

转载 作者:太空狗 更新时间:2023-10-29 13:45:16 24 4
gpt4 key购买 nike

我是 Angular 的新手,我遇到了一个问题,子组件上的构造函数被调用了两次,第二次调用时清除了第一次设置的属性。

这是父组件:

@Component({
selector: 'parent-item',
templateUrl: '...',
providers: [ItemService]
})
export class ParentItemComponent {
public parentItemId;
public model: ParentItem;

constructor(itemService: ItemService, elm: ElementRef) {
this.parentItemId = elm.nativeElement.getAttribute('parentItemId');
itemService.getParentItem(this.parentItemId).subscribe(data => this.model = data);
}
}

并且在模板中引用了子组件:

<child-items [parentItemId]="parentItemId">Loading...</<child-items>

这是子组件:

@Component({
selector: 'child-items',
templateUrl: '...',
providers: [ItemService]
})
export class ChildItemsComponent {
@Input() public parentItemId: number;
public items: Observable<ChildItem[]>;

constructor(private itemService: ItemService) {
console.log("constructor");
}

ngOnInit() {
if (this.parentItemId) {
this.items = this.itemService.getChildItems(this.parentItemId);
}
else {
console.log("Parent Id not set!");
}
}
}

最后是子组件模板:

<tr *ngFor="let item of items | async">
<td>...</td>
</tr>

子组件构造函数被调用两次,第二次调用时 parentItemId 被设置为 null 并且 items 属性被清除。如果我硬编码 parentId 而不是使用输入,数据将被正确接收并显示在模板中,但使用输入值时模板不会显示任何结果。

我创建了一个 plunker,它在此处显示了相同的行为:http://embed.plnkr.co/xaJtfNgbWCUPap2RCJUA/

最佳答案

您的问题是在 app.module 中您同时引导了父组件和子组件:

bootstrap:    [ ParentItemComponent, ChildItemsComponent ]

必须是

  bootstrap:    [ ParentItemComponent]

关于javascript - Angular 组件构造函数被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40683332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com