javascript - Hur man använder isArray() i Angular 2+-mall?


Jag har denna variabel som heter records,

Nu vill jag kolla om det är en array eller inte i angular2/typescript?

I AngularJS brukade jag göra följande:

ng-if="selectedCol.data && !isArray(selectedCol.data)"

Men när jag försöker göra följande fungerar det inte;

*ngIf="selectedCol.model.data && !Array.isArray(selectedCol.model.data)"

Det ger mig följande fel:

TypeError: Kan inte läsa egenskapen 'isArray' av undefined några inmatningar?

Svar #1

Angular 2-mallen körs inom Component:s kontext, vilket betyder att du endast kan komma åt egenskaper/metoder som definieras inom Component

Det enklaste sättet är att definiera isArray-metoden i din Component

isArray(obj : any ) {
   return Array.isArray(obj)
}

I mall

*ngIf="isArray(selectedCol.model.data)"

För att undvika standardkod, definiera Service med isArray-metod, registrera som Singleton, injicera i Component och använd isArray-metoden via Service-egenskapen

Alternativt, definiera _array-egenskapen i din Component och tilldela Array-typ till den

  private _array = Array;

I mall

*ngIf="_array.isArray(selectedCol.model.data)"

Svar #2

Även om det inte är den mest effektiva lösningen (se det andra svaret), är [].constructor.isArray lämplig för vilken uttryckskontext som helst och kräver inte att komponentklasser förorenas med hjälpfunktioner på språkets nivå:

*ngIf="selectedCol.model.data && [].constructor.isArray(selectedCol.model.data)"

Relaterade artiklar