Angular 中的 ChangeDetectorRef 实例

ChangeDetectorRef instance in Angular

我在 Angular 项目中有一个组件和一个常规 TypeScript class。该组件扩展了 class。两者都有一个独立的 ChangeDetectorRef 实例。像这样:

import { ChangeDetectorRef } from '@angular/core';

export class MySuperClass {
    private cdr: ChangeDetectorRef;
    constructor() {}
    // .. other code here
}

在另一个文件中:

import { ChangeDetectorRef } from '@angular/core';

export class MyComponent extends {
    @Component({...})

    constructor(private cdr: ChangeDetectorRef) {
        super();
    }
    // .. other code here
}

让我感到困惑的是,从超级 class 中使用的 ChangeDetectorRef 实例可以工作,即使它既没有注入也没有显式实例化。

此行为是由于 ChangeDetectorRef 的性质或继承在 TypeScript 中的工作方式的性质,还是完全不同的原因?

当angular注入时

private cdr: ChangeDetectorRef

进入 MyComponent 它实际上运行在他父亲拥有的相同参数上。

如果您单独创建 MySuperClass 的实例,或者如果您更改 MySuperClass 的 cdr 参数名称,它们都不会持有相同的 ChangeDetectorRef 上下文