如果主题在 angular 2+ 中被销毁,订阅会发生什么?
What happened with subscription if subject was destroyed in angular 2+?
更新有关可观察用法的更多详细信息
我需要服务,因为 checkboxcell 组件无法使用 @Output() 属性。
这是因为错误使用了 ag-grid api - 渲染器组件被用作编辑器。暂时无法更正。
@Component({
...
template: `<mat-checkbox (change)="onChanged($event)"></mat-checkbox>`
})
export class CheckboxCellComponent implements ICellRendererAngularComp {
...
//each component that use checkboxcell provide own instance of PermissionChange
constructor(private permissionChange: PermissionChange) {
}
public onChanged({ checked }): void {
//use observable
this.permissionChange.changeEvent.next();
}
}
原始问题
我有一个简单的服务
export class PermissionChange {
public changeEvent: Subject<void>;
constructor() {
this.changeEvent = new Subject<void>();
}
}
以及使用该服务的组件:
@Component({
...
providers: [PermissionChange]
})
export class ...Component implements OnInit {
constructor(
private permissionChange: PermissionChange,
) { }
public ngOnInit(): void {
//subscription
this.permissionChange.changeEvent.subscribe(() => {...});
}
}
PermisionChange
是该组件的个人提供者 => PermisionChange
的实例将在组件被销毁的那一刻被销毁 => changeEvent
observable 也将被销毁。所以也许不需要取消订阅,也许订阅也会被破坏?但是我不知道怎么查看。
这种情况下不需要取消订阅:父组件、子组件和服务实例都将在父组件销毁时被销毁并符合垃圾回收条件。
没有任何 live 会在服务中保留对 Subject 的引用,因此它也有资格进行 GC。
更新有关可观察用法的更多详细信息
我需要服务,因为 checkboxcell 组件无法使用 @Output() 属性。 这是因为错误使用了 ag-grid api - 渲染器组件被用作编辑器。暂时无法更正。
@Component({
...
template: `<mat-checkbox (change)="onChanged($event)"></mat-checkbox>`
})
export class CheckboxCellComponent implements ICellRendererAngularComp {
...
//each component that use checkboxcell provide own instance of PermissionChange
constructor(private permissionChange: PermissionChange) {
}
public onChanged({ checked }): void {
//use observable
this.permissionChange.changeEvent.next();
}
}
原始问题
我有一个简单的服务
export class PermissionChange {
public changeEvent: Subject<void>;
constructor() {
this.changeEvent = new Subject<void>();
}
}
以及使用该服务的组件:
@Component({
...
providers: [PermissionChange]
})
export class ...Component implements OnInit {
constructor(
private permissionChange: PermissionChange,
) { }
public ngOnInit(): void {
//subscription
this.permissionChange.changeEvent.subscribe(() => {...});
}
}
PermisionChange
是该组件的个人提供者 => PermisionChange
的实例将在组件被销毁的那一刻被销毁 => changeEvent
observable 也将被销毁。所以也许不需要取消订阅,也许订阅也会被破坏?但是我不知道怎么查看。
这种情况下不需要取消订阅:父组件、子组件和服务实例都将在父组件销毁时被销毁并符合垃圾回收条件。
没有任何 live 会在服务中保留对 Subject 的引用,因此它也有资格进行 GC。