нг-если вызывать нг-шоу?

0

У меня есть ng-if и если он оценивает TRUE, я хочу, чтобы он вызывал ng-show="someMethod()"

Что бы вы сказали, это лучший способ сделать это?

Должен ли я вызвать свой ng-if затем использовать ng-init="someMethod()" а затем в someMethod() каким-то образом применить макет ng-show?

HTML:

<div ng-repeat="(key,item) in foodOptions" ng-class={hidden : item.type != currentSection.type}" >

Затем я хочу вызвать ng-if, чтобы вызвать конкретное условие, такое как ng-if="item.type === 'pizza'" - тогда он должен вызвать ng-show = "someMethod()", который будет фильтровать доступные выпадающие списки на странице и т.д.

  • 0
    Можете ли вы опубликовать свой HTML тоже?
  • 0
    Не понятно, в чем проблема, просто добавив оба атрибута. Когда ng-if оценивает false ... элемент даже не существует
Показать ещё 4 комментария
Теги:
angularjs-ng-show

2 ответа

3
Лучший ответ

ng-if не отображает этот элемент, если условие принимает значение false

Однако вы можете использовать несколько условий в одном выражении:

ng-show="item.type == 'pizza' && someMethod()"

Обычно лучше не помещать вызовы функций в такие условные выражения, хотя

  • 0
    Это ближе к тому, что я хочу, но я хочу, чтобы он вызывал ng-show ТОЛЬКО, если это первое условие выполнено. Думаю, я мог бы использовать ng-class = "{hidden: someMethod ()}", возможно, чтобы просто скрыть элемент, если условия выполняются.
  • 1
    someMethod() здесь будет вызываться только для пиццы. Это называется «оценка короткого замыкания». Почему вы хотите отображать выпадающие списки, а не показывать их? Почему бы просто не сделать их?
Показать ещё 2 комментария
0

ng-show оценивает выражение - просто поместите свое выражение в ng-show ="myexpression || myfunction()".

Если ваш элемент или выражение не инициализированы, вы должны использовать ng-if, чтобы убедиться, что этот элемент существует только после чтения выражения. Посмотрите на это: Инициализируйте дорогой элемент с помощью ng-if, затем show/hide с ng-show/hide.

<button ng-click='showElement = !showElement; elementInitialized = true'></button> <div id='myExpensiveElement' ng-if='elementInitialized' ng-show='showElement'>... </div>

Как вы видите - ng-show может напрямую следовать за ng-if, а если false, то ng-show не произойдет, пока не будет инициализировано.

  • 0
    Но будет ли этот элемент существовать, если ng-if имеет значение false? Я хочу, чтобы он все еще показывался, но просто не вызывал нг-шоу.
  • 0
    Суть в примере кода состоит в том, чтобы исключить элемент до его инициализации, а затем использовать ng-show, чтобы показать или не показать его. Это стандартный метод использования ng-if для предотвращения появления неинициализированных элементов. Если вы хотите, чтобы элемент появлялся всегда, не используйте ng-if, просто поместите выражение в ng-show

Ещё вопросы

Сообщество Overcoder
Наверх
Меню