Как сделать одну переменную true одновременно используя ngIf

Код:

 <app-part [search]='search' *ngIf="isPart"></app-part>  
    <app-partlist [search]='search' *ngIf="isPartList"></app-partlist>

Сделать:

  • Чтобы сделать видимым только один из двух компонентов.


В приведенном ниже коде обе вкладки верны одновременно,... я пытаюсь открыть одну вкладку за раз

    getItem(search: Search) {
    if (search.item.startsWith("A") || search.item.startsWith("H") || search.item.startsWith("N") || search.item.startsWith("Q") || search.item.startsWith("R") && search.item.length == 11) {
      this.isPart = true
    }
    else if (search.item.startsWith("Z") || search.item.startsWith("V") || search.item.startsWith("X") || search.item.startsWith("G") && search.item.length == 9) {
      this.isPartList = true
    }
  }

3 ответа

Используйте только одну опору и ngIfElse

<app-part [search]='search' *ngIf="isPart; else partList"></app-part>
<ng-template #partList>
    <app-partlist [search]='search'></app-partlist>
</ng-template>

И getItem:

getItem(search: Search) {
    if (search.item.startsWith("A") || search.item.startsWith("H") || search.item.startsWith("N") || search.item.startsWith("Q") || search.item.startsWith("R") && search.item.length == 11) {
      this.isPart = true
    } else if (search.item.startsWith("Z") || search.item.startsWith("V") || search.item.startsWith("X") || search.item.startsWith("G") && search.item.length == 9) {
      this.isPart = false
    }
}

Если вам все еще нужно восстановить несколько типов, вы можете использовать строковые идентификаторы:

<app-part [search]='search' *ngIf="contnetType === 'part'"></app-part>
<app-partlist [search]='search' *ngIf="contnetType === 'list'"></app-partlist>

,

getItem(search: Search) {
    if (search.item.startsWith("A") || search.item.startsWith("H") || search.item.startsWith("N") || search.item.startsWith("Q") || search.item.startsWith("R") && search.item.length == 11) {
      this.contentType = "part";
    } else if (search.item.startsWith("Z") || search.item.startsWith("V") || search.item.startsWith("X") || search.item.startsWith("G") && search.item.length == 9) {
      this.contentType = "list";
    }
}

Это откроет только одну вкладку за раз (используя одну переменную),
В этом случае:

  • оба компонента дом рендеринга зависит от isPart переменная. И за один раз только одна правда.

  • если вам нужны две разные переменные, тогда другой ответ - ваш обязательный случай.


<app-part [search]='search' *ngIf="isPart"></app-part>  
        <app-partlist [search]='search' *ngIf="!isPart"></app-partlist>

Просто назначьте false, когда вы делаете другую переменную как true.

   getItem(search: Search) {
        if (search.item.startsWith("A") || search.item.startsWith("H") || search.item.startsWith("N") || search.item.startsWith("Q") || search.item.startsWith("R") && search.item.length == 11) {
          this.isPart = true;
          this.isPartList = false;
        }
        else if (search.item.startsWith("Z") || search.item.startsWith("V") || search.item.startsWith("X") || search.item.startsWith("G") && search.item.length == 9) {
          this.isPartList = true
          this.isPart = false;
        }
      }
Другие вопросы по тегам