Я использую angular-busy на старой кодовой базе 1.5.9 (да, да, мы скоро мигрируем, ...)
Я использую ее для проверки наличия обновлений... ", и я хочу, чтобы сообщение о занятости отображалось некоторое время, поэтому я установил delay = 0, minDuration = 1500, чтобы оно не выглядело как мерцающее.Обновления обычно занимают <200 мс. </p>
. Как часть обновлений, содержимое того, что находится в моем обновлении диалогового окна $ uibModal, и я использую ng-show, чтобы скрыть его до тех пор, пока мой звонок не будет возвращен.Эта часть прекрасно работает.Но поскольку я использую minDuration cg-busy, содержимое показывается до того, как наложение cg-busy ушло - чего я не хочу.
cg-busy знает, когда он активен и нет.Внутренне он использует дочернюю область видимости для своего класса трекера, который имеет метод $ cgBusyIsActive (), который он использует для своего собственного ng-show.Было бы здорово, если бы у меня был доступ к этому, но, немного изучив, увы, я не могу найти способ добраться до него (и, вероятно, даже не смог бы этого сделать).
Вопрос1: Кто-нибудь знает способ определить, когда cg-busy активен, и использовать его для ng-show или ng-hide?
Вот небольшой фрагмент, показывающий, что я хотел бы:
<div cg-busy="$ctrl.updatesBusy">
<div ng-show="!$cgBusyIsActive() && $ctrl.updateResult.done">
...
</div>
</div>
Вопрос 2: Или есть более эффективные / различные способы выполнения моего обходного пути ниже, чтобы заставить цепочку обещаний иметь minDuration?
Чтобы обойти это в настоящее время, япросто создайте мой собственный таймер и вставьте тайм-аут в мою цепочку обещаний, которая срабатывает, если в minDuration осталось какое-то время, но я бы хотел решение, которое использует minDuration cg-busy.
const cgTimerStarted = Date.now();
$ctrl.updatesBusy.promise = myUpdateCallAsync()
.then(function(result) {
// blah blah, blah blah
return $q.resolve(); // return a promise obj or cg-busy will go away
})
.catch(function(err) {
// boo hoo, boo hoo
return $q.resolve(); // return a promise obj or cg-busy will go away
})
.then(function() {
const minDuration = $ctrl.updatesBusy.minDuration;
const timeTaken = Date.now() - cgTimerStarted;
const timeLeft = Math.max(minDuration - timeTaken, 0);
return $timeout(timeLeft);
})
.finally(function() {
$ctrl.updatesResult.done = true;
});