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;
}
}
