2016-06-07 6 views
11

Ho questa variabile denominata records,Come usare isArray() in dattiloscritto?

Ora voglio verificare se è un array o non in angular2/dattiloscritto?

In AngularJS ho usato per fare seguire:

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

ma quando sto cercando di fare quanto segue non il suo lavoro;

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

Its me dà seguito di errore:

TypeError: Cannot read property 'isArray' of undefined any inputs?

risposta

12

angolare 2 modello viene eseguito all'interno contesto Component s', significato, si può solo proprietà di accesso/metodi definiti all'interno Component

modo più semplice è per definire il metodo isArray nel tuo Component

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

Nel modello

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

Per evitare codice standard, definire Servizio con isArray metodo, registrare come Singleton, iniettare Component Utilizzando isArray metodo via servizio struttura

alternativa, definiscono _array struttura nel vostro Component e assegnategli il Array tipo

private _array = Array; 

Nel modello

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

In aggiunta a quanto detto @tchelidze:

angolare 2 fornisce un wrapper chiamato isArray in facade/lang esportati e definito in questo modo:

export function isArray(obj: any): boolean { 
    return Array.isArray(obj); 
} 

È possibile importare nel tuo componente in questo modo:

import {isArray} from '@angular/facade/lang'; 

Poi si potrebbe esporlo pubblicamente nel componente:

this.isArray = isArray

E utilizzare nel modello in questo modo:

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

1

Pur non essendo la soluzione più efficiente (vedi altra risposta), [].constructor.isArray è adatto per qualsiasi contesto di espressione e non richiede di contaminare le classi di componenti con helper a livello di linguaggio:

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