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)"
