gpt4 book ai didi

angular - 从实现它的地方传回对注入(inject)服务类的引用

转载 作者:行者123 更新时间:2023-12-05 07:31:55 25 4
gpt4 key购买 nike

我想知道在我的 Angular 6 项目中是否可以将实现了自定义接口(interface)的组件类的引用传回给注入(inject)的服务类?

我想要的示例。

服务类

@Injectable()
export class MyService {
constructor(private parent: MyComponent){ // <- Get back a reference from the component I inject this into, somehow?
parent.doStuff();
}
}

组件类

@Component({
selector: 'project-a-component',
template: `
<div>stuff</div>
`,
styleUrls: ['./a.component.scss']
})
export class AComponent implements MyComponent {
constructor(private myService: MyService){ }

doStuff(): void {
console.log('yey!');
}
}

编辑:我想要存档的是一种监听 OnDestroy 事件的方法,以便组件能够运行 .pipe(takeUntil(parent.isDestroyed)) 取消订阅,而无需在我在项目中使用我的服务的每个地方实现它。或者必须在每个方法调用中传递对我的父组件的引用。一种在构造函数中(或仅在一个地方)引用的方法会很棒。因此,我尝试以尽可能相关且简单的方式解释我的问题。

最佳答案

看看这个:https://netbasal.com/automagically-unsubscribe-in-angular-4487e9853a88所以你可以制作你自己的版本,挂接到组件中的 OnDestroy 并做任何你想做的事情:

export function MyDecorator( constructor ) {
const original = constructor.prototype.ngOnDestroy;
constructor.prototype.ngOnDestroy = function () {
if (this.myService) {
// do stuff!
}
};
}

当然您可以使用与文章中相同的示例,这将取消订阅所有订阅,这当然是可取的,而不仅仅是针对单个服务! :)

然后将其导入您的组件并在您的组件上标记装饰器:

@MyDecorator
export class MyComponent {
// ...

关于angular - 从实现它的地方传回对注入(inject)服务类的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51553702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com