Pesquisa de site

angular - Um método de classe pode ser chamado a partir de um pipe async?


É possível chamar um método em uma classe observável via pipe assíncrono?

Eu tentei o seguinte, mas não consigo fazer funcionar. Então eu estava me perguntando se isso é possível ou poderia ser feito de uma forma melhor?

app.component.html

<p>Total Cost: {{ (orderState$ | async).TotalPrice() }}</p>

order.state.ts

export class OrderState {
    lineItems: OrderLineItem[];

    public TotalPrice(): number
    {
        // TODO: Calculate price of line items
        return 199;
    }
}

Resposta #1

Crie outro observable se for necessário. Será melhor do que definir uma variável dentro de subscribe.

export class OrderState {
  lineItems: OrderLineItem[];
  get totalPrice(): number {
    // TODO: Calculate price of line items
    return 199;
  }
}

export class TheComponent {
  orderState$: Observable<OrderState>;
  // Here
  totalPrice$: Observable<string>;

  constructor() {
    // And then after you know what the orderState is.
    this.totalPrice$ = this.orderState$.map(state => state.totalPrice);
  }
}

<p>Total Cost: {{totalPrice$ | async}}</p>

Resposta #2

Talvez algo assim possa funcionar. Basicamente, inscreva-se no stream no construtor e, quando os dados chegarem, calcule o preço.

Além disso, se você for fazer testes de unidade, isso será mais fácil do que tudo no modelo.

app.component.html

<p>Total Cost: {{ totalPrice }}</p>

order.state.ts

export class OrderState {
  lineItems: OrderLineItem[];
  totalPrice: string = '';

  constructor() {
    orderState$.subscribe((value) => {
      this.totalPrice = this.CalculateTotalPrice(value);
    });
  }

  public CalculateTotalPrice(): number {
    // TODO: Calculate price of line items
    return 199;
  }
}