Как мне включить в *ngIf
заявление несколько случаев ? Я привык к Vue или угловым 1 с наличием if
, else if
и else
, но, похоже угловым 4 имеет только true
( if
) и false
( else
) состояние.
Согласно документации, я могу делать только:
<ng-container *ngIf="foo === 1; then first else second"></ng-container>
<ng-template #first>First</ng-template>
<ng-template #second>Second</ng-template>
<ng-template #third>Third</ng-template>
Но я хочу иметь несколько условий (что-то вроде):
<ng-container *ngIf="foo === 1; then first; foo === 2; then second else third"></ng-container>
<ng-template #first>First</ng-template>
<ng-template #second>Second</ng-template>
<ng-template #third>Third</ng-template>
Но в итоге мне приходится использовать ngSwitch
, что похоже на взлом:
<ng-container [ngSwitch]="true">
<div *ngSwitchCase="foo === 1">First</div>
<div *ngSwitchCase="bar === 2">Second</div>
<div *ngSwitchDefault>Third</div>
</ng-container>
С другой стороны, похоже, что многие синтаксисы, к которым я привык в Angular 1 и Vue, не поддерживаются в Angular 4, так что каков был бы рекомендуемый способ структурировать мой код с такими условиями?
angular
templates
angular-ng-if
Александр Абакумов
источник
источник
Ответы:
Другая альтернатива - условия гнездования.
источник
<ng-template #second *ngIf="foo === 2;else third">
Вы можете просто использовать:
я полагаю, если только часть ng-container не важна для вашего дизайна.
Вот плункер
источник
if (index === 1) else if (foo === 2)
что нужно было бы написать,if (index === 1) if (index !== 1 && foo === 2)
что немного беспорядочно и более подвержено ошибкам, тем больше раз нам придется писать обратную логику.if (item === 'food' && kind === 'hamburger') {} else if (item === 'food' && kind === 'hotdog') {} else if (item === 'drink' && kind === 'beer') {} else if (item === 'drink' && kind === 'wine') {} else { /* could be poisonous */ }
NgTemplateOutlet
контекст типа * ngTemplateOutlet = "drink; context: beer" или другой компонент для категоризации.Кажется, это самый чистый способ сделать
в шаблоне:
Обратите внимание, что это работает так, как
else if
должно когда в условиях используются разные переменные (за один раз истинен только один случай). Некоторые другие ответы не работают в таком случае.в сторону: черт возьми, угловой, это действительно уродливый
else if
код шаблона ...источник
Вы можете использовать несколько способов в зависимости от ситуации:
Если ваша переменная ограничена определенным числом или строкой , лучше всего использовать ngSwitch или ngIf:
Выше не подходит для кодов if elseif else и динамических кодов, вы можете использовать следующий код:
источник
*ngIf="foo >= 7; then t7"
вместо... else t7
.foo >= 4 && foo <= 6; then t46; else t7
.Чтобы избежать вложенности и ngSwitch, существует также эта возможность, которая использует способ работы логических операторов в Javascript:
источник
Или, может быть, просто используйте условные цепочки с тернарным оператором.
if … else if … else if … else
цепь.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator#Conditional_chains
Мне этот подход больше нравится.
источник
<ion-row *ngIf="cat === 1;else second"></ion-row> <ng-template #second> <ion-row *ngIf="cat === 2;else third"></ion-row> </ng-template> <ng-template #third> </ng-template>
источник
Вы также можете использовать этот старый трюк для преобразования сложных блоков if / then / else в более понятный оператор switch:
источник