'How to apply async pipe on observable in ng-container conditionally if some boolean is true in angular

I have an http request that I subscribe to using angular's async pipe. The logic i need is that the async pipe to be added to the ng-container tag only if a certain condition is true. I tried the following code :

         <ng-container *ngIf="eventCode != 'ADD' ? this.tableObservable | async as detailData : true">
                    <ng-container *ngIf="this.dataTable">
        <tk-dynamic-table-versatile 
[metadata]="eventCode != 'ADD' ? detailData.payload.metadata : this.children[0].metadata" [data]="eventCode != 'ADD' ? detailData.payload.data : null"
                             #dynamictable1>
    </tk-dynamic-table-versatile>
        
              </ng-container>
                </ng-container>

I need the tableObservable to only have the async pipe if the string eventCode != 'ADD' , else i dont want any operations on tableObservable.

is there any way to add the async pipe to ng-container conditionally in angular?

looking forward for some insights on the best way to tackle this.



Solution 1:[1]

You can't conditionally bind to the async pipe using template syntax, it just doesn't support it. What you can do is subscribe to this.tableObservable conditionally in your component's logic, e.g:

ngOnInit(): void {
  if (this.eventCode !== 'ADD') {
   this.tableObservable.subscribe({
     next: (data) => {
       this.detailData = data;
     }
   });
  }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 ardentia