2016-07-14 1 views
1

Ich versuche, eine dynamische HTML-Tabelle mit den folgenden Daten zu erstellen:Filter basierend auf Variablentyp beim Erstellen dynamische HTML-Tabellenspalten mit ng-repeat

myApp.controller('MyCtrl', function($scope) { 

    $scope.data = [{ 
    id: 201, 
    text: "Some Text", 
    date: new Date("October 13, 2014 11:13:00") 
    }, { 
    id: 202, 
    text: "Other Text", 
    date: new Date("October 13, 2014 11:13:00") 
    }]; 

}); 

HTML:

<div ng-controller="MyCtrl"> 
    <table> 
    <tr> 
     <th>ID</th> 
     <th>Text</th> 
     <th>Date</th> 
    </tr> 
    <tr ng-repeat="items in data"> 
     <td ng-repeat="item in items">{{item}}</td> 
    </tr> 
    </table> 
</div> 

enter image description here

Aber ich möchte einen Datumsfilter jedes Mal anwenden, wenn die innere ng-Wiederholung auf einen Datumstyp trifft, aber nicht, wenn es auf einen anderen Typ (wie eine Zeichenfolge) stößt. Ich habe einige bereits verfügbare Lösungen ausgecheckt, konnte sie aber in diesem Fall nicht anwenden.

Here is the Fiddle.

+0

dies dort arbeitet ' {{item.date | date}} 'siehe aktualisierte Geige https://jsfiddle.net/imraqes/7k3h9fra/1/ – Rakeschand

+0

Aber ich muss die dynamisch mit ng-repeat angeben, und nicht jedes einzelne Element als Tag. – Rishabh

Antwort

2

Anwendung des date Filter ist die einfachste Lösung. Wie Sie in der documentation sehen kann, wird es ohnehin nur zu Zeitpunkten gelten:

Returns String
Formatierter String oder die Eingabe, wenn der Eingang nicht als Datum/Millis erkannt wird.

Das ist also gültig:

<td ng-repeat="item in items">{{item | date}}</td> 

Auch wenn item kein Datum ist.

Siehe updated fiddle.

aktualisiert

Da Sie auch numerische Werte haben, ich glaube, es ist etwas weniger generisch im Code sein muss, um zu überprüfen, ob das aktuelle Feld als Datum behandelt werden soll.

Beachten Sie Folgendes:

<td ng-repeat="(key, item) in items">{{isDate(key) ? (item | date) : item}}</td> 

Controller-Code:

$scope.isDate = function(key) { 
    if (key === 'date') {//add more conditions if necessary 
     return true; 
    } 
    return false; 
} 

Fiddle

+0

Diese Lösung schlägt fehl, wenn eine numerische Variable im Objekt wie ID vorhanden ist. Es wird alles bis zum Datum, einschließlich numerisch, konvertieren. – Rishabh

+0

Siehe aktualisierte Antwort – yarons

+0

Das ist perfekt! – Rishabh

Verwandte Themen