这里发生的情况是,在 Angular 模板中使用 getter 会导致许多我们没有预料到的问题。
我说的是你代码中的这些吸气剂:
public get Judete(): any[] {
return [{auto: "AB", nume: "Alba"}, {auto: "AR", nume: "Arad"}...];
}
Angular 检查模板绑定并在每个更改检测周期执行所有 getter。该模板获取 Judete 数组的新实例,每次检查时每个项目都有新实例。
现在让我们看看你在哪里使用该数组。
*ngFor="let item of Judete"
Angular 内置的ngForOf 指令使用特殊算法在IterableDiffers 的帮助下查找数组中的更改。这不同会发现您的数组在每个更改检测周期中都是一个全新的数组,这会导致重新渲染项目。这意味着在每次更改检测运行时都会创建新的 SelectOptionComponent 项,并且您会失去对 ContentChildren 的订阅
所以解决方案应该很简单:只需定义一次数组,而不是使用 getter:
Judete = [{auto: "AB", nume: "Alba"}, {auto: "AR", nume: "Arad"}, ...];
Forked Stackblitz