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 组件中。不是相反。因此该服务不包含对使用它的组件的任何引用。
如果有一个组件提供它自己的服务:
@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 组件中。不是相反。因此该服务不包含对使用它的组件的任何引用。