如果主题在角度2+中被销毁,那么订阅会发生什么?

时间:2018-01-30 11:35:19

标签: angular observable subscription unsubscribe

更新有关可观察使用情况的更多详情

我需要服务,因为checkboxcell组件无法使用@Output()属性。 发生这种情况是因为使用了ag-grid api-renderer组件作为编辑器。目前无法纠正。

Printing description of result:
Results <0x7fb64f02c230> (

)

原始问题

我有一个简单的服务

@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(() => {...}); } } 是此组件的个人提供商=&gt;在组件被销毁的那一刻,PermisionChange的实例将被销毁=&gt; PermisionChange可观测量也将被销毁。所以也许没有必要取消订阅,也许订阅也会被销毁?但我不知道如何检查它。

1 个答案:

答案 0 :(得分:1)

在这种情况下,您不需要取消订阅:父组件,子组件和服务实例都将被销毁,并且在销毁父组件时有资格进行垃圾回收。

没有任何实时内容会在服务中保留对主题的引用,因此它也有资格获得GC。