2015-09-27 3 views
0

Итак, у меня есть два элемента, которые отображаются внутри 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; 
    } 
} 

Любые идеи?

+0

Вам нужно третье состояние, которое показывает краткое сообщение «загрузка». Он мерцает из-за задержки между запросом и ответом сервера. – cgTag

+0

ОП использует обещания, и только после того, как будет определено обещание http, устанавливается 'myModel.items [idx] .link. Я не вижу, как время отклика сервера повлияет на это. \ –

+1

Могут ли быть классы анимации (например, 'ng-hide-animate'), вызывающие временную показ обеих кнопок? Используйте контрольную точку dom-modify, чтобы увидеть состояние dom/scope, когда отображаются обе кнопки. – user1620220

ответ

2

Так что кредит пользователю1620220, который указал на него. Проблема заключается в запуске ng-animate, который вызывает запуск ng-hide-animate, вызывающий незначительное мерцание.

Вы можете отключить ng-animate или использовать CSS для перехода на «переход», если вы хотите частично отключить его.

Смежные вопросы