Итак, у меня есть два элемента, которые отображаются внутри ng-repeat, когда я нажимаю кнопку, которая делает переключение, на короткую секунду отображаются оба элемента.AngularJS - ngShow/ngSwitch/ngIf - Два элемента мерцают
Я пробовал различные вещи, ngIf, ngShow, ngSwitch и ngCloak, и ничего не работает.
Вот пример кода:
<div data-ng-repeat="item in view.myModel.items">
<div class="row">
<a ng-hide="item.link" class="btn ng-cloak"
ng-click="view.getLink($index)">Get Link</a>
<a ng-show="item.link" class="btn ng-cloak"
data-ng-href="{{item.link}}" download>Download</a>
</div>
</div>
Так вот проблема, при загрузке я вижу только «Получить ссылку» кнопку, которая отлично.
Как только я нажимаю на него, он вызывает http-вызов и устанавливает значение «items.link», в котором возникает проблема. В этот момент показаны обе кнопки.
Затем правильно отображается только кнопка загрузки.
Вот HTTP вызов, если ваш заинтересованный:
/**
* Get a link
*/
function getLink(idx) {
Linker
.getLink(idx)
.then(onGotLink);
function onGotLink(link) {
myModel.items[idx].link = link.url;
}
}
Любые идеи?
Вам нужно третье состояние, которое показывает краткое сообщение «загрузка». Он мерцает из-за задержки между запросом и ответом сервера. – cgTag
ОП использует обещания, и только после того, как будет определено обещание http, устанавливается 'myModel.items [idx] .link. Я не вижу, как время отклика сервера повлияет на это. \ –
Могут ли быть классы анимации (например, 'ng-hide-animate'), вызывающие временную показ обеих кнопок? Используйте контрольную точку dom-modify, чтобы увидеть состояние dom/scope, когда отображаются обе кнопки. – user1620220