Улучшить эту документацию Просмотреть исходный код ngShow
- директива в модуле ng
Обзор
Директива ngShow отображает или скрывает заданный HTML-элемент в зависимости от выражения, предоставленного атрибуту ngShow.
Элемент отображается или скрывается путем удаления или добавления CSS-класса .ng-hide к элементу. Класс .ng-hide предопределен в AngularJS и устанавливает стиль отображения в none (используя флаг !important). Для режима CSP добавьте angular-csp.css в свой HTML-файл (см. ngCsp).
<!-- when $scope.myValue is truthy (element is visible) --> <div ng-show="myValue"></div> <!-- when $scope.myValue is falsy (element is hidden) --> <div ng-show="myValue" class="ng-hide"></div>
Когда выражение ngShow принимает ложное значение, к атрибуту класса элемента добавляется класс .ng-hide, что приводит к его скрытию. При истинном значении класс .ng-hide удаляется из элемента, и элемент перестает быть скрытым.
Почему используется !important?
Вы можете задаться вопросом, почему используется !important для класса .ng-hide CSS. Это происходит потому, что селектор .ng-hide может быть легко переопределён селекторами с большим приоритетом. Например, такие простые действия, как изменение стиля отображения элемента списка HTML, могут привести к отображению скрытых элементов. Эта проблема становится ещё более актуальной при работе с CSS-фреймворками.
Используя !important, поведение отображения и скрытия будет работать как ожидается, несмотря на любые конфликты между специфичностью селекторов CSS (когда !important не используется с каким-либо конфликтующим стилем). Если разработчик захочет переопределить стили для изменения способа скрытия элемента, он просто должен использовать !important в своём CSS-коде.
Переопределение .ng-hide
По умолчанию класс .ng-hide стилизует элемент со значением display: none !important. Если вы хотите изменить поведение скрытия с помощью ngShow/ngHide, вы можете просто переопределить стили для класса .ng-hide CSS. Обратите внимание, что селектор, который нужно использовать, фактически .ng-hide:not(.ng-hide-animate), чтобы справиться с дополнительными классами анимации, которые могут быть добавлены.
.ng-hide:not(.ng-hide-animate) {
/* These are just alternative ways of hiding an element */
display: block!important;
position: absolute;
top: -9999px;
left: -9999px;
}
По умолчанию вам не нужно ничего переопределять в CSS, и анимации будут работать вокруг стиля отображения.
Известные проблемы
Мерцание при использовании ngShow для переключения между элементами
При использовании ngShow и/или ngHide для переключения между элементами может случиться, что и отображаемый, и скрываемый элементы будут видимы в течение очень короткого времени.
Это обычно происходит, когда включён модуль ngAnimate, но не определены анимации для ngShow / ngHide. Проблема чаще затрагивает Internet Explorer, чем другие браузеры.
Существует несколько способов решения этой проблемы:
- Отключить анимации для затронутых элементов.
- Используйте
ngIfилиngSwitchвместоngShow/ngHide. - Используйте специальный CSS-селектор
ng-hide.ng-hide-animateдля установки{display: none}или аналогичного значения для затронутых элементов. - Используйте
ng-class="{'ng-hide': expression}вместоngShow/ngHide. - Определите анимацию для затронутых элементов.
Информация о директиве
- Эта директива выполняется на уровне приоритета 0.
- Эта директива может использоваться как многоэлементная
Использование
- как элемент:
<ng-show ng-show="expression"> ... </ng-show>
- как атрибут:
<ANY ng-show="expression"> ... </ANY>
Аргументы
| Параметр | Тип | Подробности |
|---|---|---|
| ngShow | expression |
Если выражение выражение истинно/ложно, то элемент соответственно отображается/скрывается. |
Анимации
| Анимация | Происходит |
|---|---|
addClass .ng-hide
|
После того, как выражение ngShow принимает ложное значение и непосредственно перед тем, как содержимое будет скрыто. |
removeClass .ng-hide
|
После того, как выражение ngShow принимает истинное значение и непосредственно перед тем, как содержимое будет отображено. |
Анимации в ngShow/ngHide работают с событиями отображения и скрытия, которые запускаются при истинном и ложном значении выражения директивы. Эта система работает аналогично системе анимации с ngClass, за исключением того, что вам также необходимо включить флаг !important для переопределения свойства display, чтобы элементы не скрывались во время анимации.
/* A working example can be found at the bottom of this page. */
.my-element.ng-hide-add, .my-element.ng-hide-remove {
transition: all 0.5s linear;
}
.my-element.ng-hide-add { ... }
.my-element.ng-hide-add.ng-hide-add-active { ... }
.my-element.ng-hide-remove { ... }
.my-element.ng-hide-remove.ng-hide-remove-active { ... }
Обратите внимание, что начиная с версии AngularJS 1.3, нет необходимости изменять свойство display на block во время состояний анимации — ngAnimate автоматически обрабатывает переключение стилей для вас.
Нажмите здесь, чтобы узнать больше о шагах, участвующих в анимации.Примеры
Простой пример с анимацией непрозрачности элемента:
Более сложный пример с различными анимациями отображения/скрытия:
© 2010–2020 Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
https://code.angularjs.org/1.8.2/docs/api/ng/directive/ngShow