Accessing result of async pipe in template from component code in Angular 2
Asked Answered
L

2

7

In Angular 2 I have a component with a template.

In the component TypeScript code i create a Reactive Extensions Observable (items$) and use it in an ngFor-directive in the template with an async-pipe.

This way I do not have to worry about subscribing and unsubscribing myself.

<div *ngFor="let item of items$ | async"></div>
...
</div>

Now from the component code I would like to access the list of items, but without subscribing to it. Is there a way from the template to hand back a copy of or reference to the items list?

Lepper answered 12/9, 2017 at 11:56 Comment(1)
I think now it not possible that... you will have to make a subscriptions on the .ts and store the result in a variable...Roommate
M
11

You could just do this in the component:

items$.pipe(tap(items => this.items = items);

This way, you don't subscribe to the stream, and can keep using async pipe, but if a new value is emitted it will be saved in items variable.

Manure answered 25/7, 2019 at 10:30 Comment(0)
R
1

Since Angular 4+ you can use special syntax with as (works for *ngIf as well):

<div *ngFor="let item of items$ | async as items"></div>
  {{ items.length }} ...
</div>

See the example here https://angular.io/api/common/NgForOf

Retrogress answered 12/9, 2017 at 12:1 Comment(3)
Yes, but I would like a reference to the entire list of items, and would like to access it in the component code (ts-file)Lepper
Then no, you'll need to make the subscription in the component.Retrogress
Actually you can: check this https://mcmap.net/q/1445809/-accessing-result-of-async-pipe-in-template-from-component-code-in-angular-2Manure

© 2022 - 2024 — McMap. All rights reserved.