这里发生的事情是,在 Angular 模板中使用 getter 可能会导致许多我们没有预料到的问题。
我正在谈论您代码中的这些吸气剂:
public get Judete(): any[] {
return [{auto: "AB", nume: "Alba"}, {auto: "AR", nume: "Arad"}...];
}
Angular 检查模板绑定并在每个更改检测周期执行所有 getter。该模板获取新实例Judete
数组,其中包含每次检查中每个项目的新实例。
现在让我们看看在哪里使用该数组。
*ngFor="let item of Judete"
内置角度ngForOf
指令使用特殊算法来查找数组中的变化IterableDiffers
。这种差异发现您的数组在每个更改检测周期中都是完全新的数组,这会导致重新渲染项目。这意味着每次更改检测运行时都会创建新的 SelectOptionComponent 项目,并且您会丢失 ContentChildren 的订阅
所以解决方案应该很简单:只需定义一次数组,而不是使用 getter:
Judete = [{auto: "AB", nume: "Alba"}, {auto: "AR", nume: "Arad"}, ...];
叉式堆栈闪电战 https://stackblitz.com/edit/angular-azkxxs?file=src/app/app.component.ts