Angular - 获取提供服务的组件

Angular - Get component that provided service

如果有一个组件提供它自己的服务:

@Component({
    selector: 'user-list',
    templateUrl: './user-list.component.html',
    styleUrls: ['./user-list.component.scss'],
    encapsulation: ViewEncapsulation.None,
    changeDetection: ChangeDetectionStrategy.OnPush,
    animations: fuseAnimations,
    providers: [
        TableSettingsService
    ]
})
export class UserListComponent {}

这个 TableSettingsService 能否以某种方式获得该组件的引用?我试过了

@Injectable()
export class TableSettingsService {
    constructor(
        persistentService: PersistentService,
        @Optional() @Self() persistentObject: UserListComponent
    ) {
        alert(!!persistentObject);
    }
}

是什么导致了循环依赖。

Get component that provided service

不是提供服务的组件。该服务已注入组件内部。搜索以了解依赖注入作为一个概念实际上是如何工作的。然后你就会明白为什么你不能达到你想要的。

您在组件中使用了 providers 数组

providers: [
        TableSettingsService
    ]

所以UserListComponent肯定会使用<user-list>组件的ElementInjector获取服务。

UserListComponent 的任何子组件也将(如果它们没有自己的服务提供者数组声明)从 <user-list> 组件的 ElementInjector 检索服务。

在任何情况下,服务都被注入到 angular 组件中。不是相反。因此该服务不包含对使用它的组件的任何引用。