Ответ 1
Проблема заключается в том, что вы пытаетесь анимировать использование класса и не различать, когда нужно оживлять вещи. То есть ваш эффект перехода применяется к классу в целом, который ng-animate воспринимает как необходимость выполнять работу всякий раз, когда на этот класс ссылаются. Я немного изменил ваш css, чтобы получить довольно близко, если не совсем, что вы хотите:
#square {
width: 50px;
height: 50px;
background-color: blue;
transition: 0.4s all ease-out;
}
#square.cool {
box-shadow: 0 0 10px 3px green;
background-color: lightgreen;
}
#square.ng-hide-add, #square.ng-hide-remove
{
display: block !important;
}
#square.ng-hide-remove, #square.ng-hide-add.ng-hide-add-active{
margin-left: -80px;
opacity: 0;
}
#square.ng-hide-remove.ng-hide-remove-active, #square.ng-hide-add{
margin-left: 0;
opacity: 1;
}
Вот новый plunkr, чтобы вы могли играть с ним: http://plnkr.co/edit/a7wiZfCrEGCXfIDSvF9r?p=preview
Если вы хотите ТОЛЬКО оживить шоу/скрыть и не хотите перехода для цвета, просто переместите переход к объявлению #square.ng-hide-add, #square.ng-hide-remove
.