Как я могу исчезать и видеть видимость DIV, используя ng-show с бета-версией AngularJS 1.3?

Мой код выглядит следующим образом:

<div class="block-border"
     data-ng-show="qty > 0">
   xxx
</div>

Я знаю, что с анимацией в AngularJS было много изменений. Может ли кто-нибудь сказать мне самый простой способ заставить меня занять 500 мс, чтобы показать, и 50 мс, чтобы скрыть xxx, когда значение qty изменится. Обратите внимание, что я использую самую последнюю версию AngularJS.

Ответ 1

  • Ссылка angular -animate.js

  • Добавьте ngAnimate в качестве зависимого модуля:

    var app = angular.module('app', ['ngAnimate']);
    
  • Выберите имя для вашего перехода, например "fade", а затем определите соответствующие классы CSS на основе соглашения об именах, описанного в документация:

    .fade.ng-hide {
      opacity: 0;
    }
    
    .fade.ng-hide-remove,
    .fade.ng-hide-add {
      display: block !important; /* or inline-block, as appropriate */
    }
    
    .fade.ng-hide-remove {
      transition: all linear 1000ms;
    }
    
    .fade.ng-hide-add {
      transition: all linear 500ms;
    }
    
  • Добавьте класс в свой элемент:

    <div class="block-border fade" ng-show="qty > 0">
    

Демо: http://plnkr.co/edit/HWi0FfDOsHeSOkcrRtN2?p=preview

Ответ 2

Я не мог получить принятый ответ на работу, но следующее работа (взятое в основном из этого сообщения ng-nuggets):

.fade {
    transition: all linear 500ms;
    opacity: 1;
}

.fade.ng-hide {
    opacity: 0;
}

а затем мой HTML-элемент, который я хотел затухать, выглядел примерно так:

<span data-ng-show="copyLinkClicked" class="fade">some text here</span>

Как отметил @MichaelNguyen, Bootstrap, похоже, имеет стиль, уже названный fade, и мы используем Bootstrap в нашем приложении, но тем не менее эти стили работали. Если у вас уже есть стиль с именем fade, измените имя на нечто уникальное, прежде чем использовать приведенный выше код.

Ответ 3

Если вы хотите затухать при использовании ng-if в качестве логического angular, здесь есть хорошая документация https://docs.angularjs.org/api/ngAnimate. Я использовал ng-if для моих затухающих целей здесь пример ниже:

form.html

<form name="exampleForm" ng-submit="submit()">
  <input type="email" placeholder="Email Address" ng-model="email" required>
  <input type="text" placeholder="Name" ng-model="name" required>
  <input class="invalid-btn" ng-if="exampleForm.$invalid" type="submit" value="Invalid" />
  <input class="valid-btn" ng-if="exampleForm.$valid" type="submit" value="Valid">
</form>

form.css

/* css for button that will show when form is invalid */
.invalid-btn {
  border: 1px solid #222;
  width: 100px;
  height: 50px;
  color: #222;
  background: #fff;
}

.invalid-btn.ng-enter {
  opacity: 1;
}

/* The finishing CSS styles for the enter animation */
.invalid-btn.ng-enter.ng-enter-active {
   opacity: 0;
}

.valid-btn {
  width: 100px;
  height: 50px;
  background: #F26623;
  color: #fff;
}

/* The starting CSS styles for the enter animation */
.valid-btn.ng-enter {
  transition:0.5s linear all;
  opacity: 0;
}

.valid-btn.ng-enter-stagger {
  /* this will have a 100ms delay between each successive leave animation */
  transition-delay: 0.3s;

  /* As of 1.4.4, this must always be set: it signals ngAnimate
to not accidentally inherit a delay property from another CSS class */
  transition-duration: 0s;
}

 /* The finishing CSS styles for the enter animation */
.valid-btn.ng-enter.ng-enter-active {
  width: 100px;
  height: 50px;
  background: #F26623;
  color: #fff;
  opacity:1;
}

Как это работает, если вы хотите затухать кнопкой с другим цветом или текстом и другим цветом текста, вы можете затухать в кнопке, когда форма заполнена и действительна, а недопустимая кнопка исчезнет, ​​оставив только одну в зависимости от состояния формы. Вид взлома, но он работает и выглядит гладко. Мне пришлось установить задержку с помощью .ng-enter-stagger, потому что загрузка анимаций в одно и то же время вызывала мигание кнопок, их плавное переключение и плавное оживление. Таким образом, в этом случае мы разрешаем недействительную кнопку скрыть сначала, а затем загружать действительную кнопку, когда форма действительна, и все поля ввода заполнены правильно.