Я пытаюсь отключить / включить кнопку в компоненте на основе состояния свойства false/true
. Этот статус изменяется в службе на основе оператора if.
*.service.ts
:
public connectionRetry(
initialDelay,
maxRetry,
errorWhiteList,
triggerBtn,
) {
return (errors) => errors.scan((retryAttempts, error) => {
if ( retryAttempts < maxRetry ) {
triggerBtn = true;
}
if ( !errorWhiteList.includes(error.status ) || retryAttempts > maxRetry) {
triggerBtn = false;
throw error;
}
return retryAttempts + 1;
}, 0).switchMap((retryAttempts) => {
let delay = Math.pow(2, retryAttempts - 1) * initialDelay;
return Observable.timer(delay);
});
}
*.component.ts
:
public isBtnDisabled = false;
constructor ( public mainService: MainService, public mainUtils: MainUtils ) {}
public storeData(paramX, paramY) {
this.mainService.addUser(paramX, paramY)
.retryWhen(
this.mainUtils.connectionRetry(
xxx,
xxx,
[xxx],
this.isBtnDisabled,
))
.subscribe(
res => {....},
error = > {...}
);
}
*.component.html
<button [disabled]="!form.valid || isBtnDisabled">button text</button>
Проблема в том, что я просто не могу заставить эту концепцию работать ... свойство isBtnDisabled
всегда сохраняет статус: false
в компоненте ts
и html
.
Если я реализую функцию: connectionRetry()
непосредственно в *.component.ts
, она работает прямо, но не через сервис. Это связано с циклом углового дайджеста?
Я искал (также здесь, в SOF) и пробовал другой подход, но, к сожалению, безуспешно. Кажется, на самом деле все просто.