В моем компоненте детали клиента у меня есть следующий код, который достигает того, что мне нужно, но не в реактивном/наблюдаемом способе, я думаю, это возможно.Используя Observables, покажите индикатор загрузки после задержки, но отмените, если загрузка завершена вовремя?
Вместо того, чтобы обертывать this.isLoading = true;
в инструкции if, есть ли способ сделать это с использованием методов реактивного программирования? Возможно, отменив/отбросив задержанную наблюдаемую, если клиент будет извлечен первым? Или я об этом неправильно?
export class CustomerDetailComponent implements OnInit {
customer: Customer;
errorMessage: string;
isLoading: boolean;
constructor(
private customerService: CustomerService,
private route: ActivatedRoute,
private router: Router,
private location: Location
) { }
ngOnInit() {
let idParam = this.route.params
.distinctUntilChanged(params => params['id']);
idParam.subscribe(params =>
{
this.errorMessage = '';
});
idParam.delay(300).subscribe(params =>
{
if (!(this.customer && this.customer.id == params['id']))
this.isLoading = true;
});
idParam.switchMap((params: Params) => this.customerService.getCustomer(params['id']))
.subscribe(customer =>
{
this.customer = customer;
this.isLoading = false;
},
error => this.errorMessage = error);
}
}
Это намного чище, чем мой код, спасибо. Однако у меня есть задержка перед установкой this.isLoading = true, и мой вопрос заключается в том, как отменить его, если this.customerService.getCustomer заканчивается первым - можете ли вы помочь с этим? – Dean
@ Dean Ах, я вижу, что вы собираетесь делать. Я обновил свой ответ. – martin