2017-02-08 2 views
0

Ich kann nicht scheinen, dass das funktioniert. Ich versuche, jedes leere Leerzeichen durch den Buchstaben "T" zu ersetzen, um meine Zeichenfolge in ein Datumsformat zu konvertieren, aber ich kann nicht scheinen, dass es funktioniert. Mein Array funktioniert, wenn ich console.log und sehe, dass es ist JJJJ-MM-TTTHH: mm-Format. Aber wenn ich es mit dem ng-Repeat-Filter verbinde, macht es nichts. Hier ist mein Code und Link zur JSbin https://jsbin.com/nesedenoce/edit?html,js,console,outputWinkelfilter zum Ersetzen einer Zeichenfolge in einem 3D-Array

HTML

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width"> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script> 
    <title>date filter</title> 
</head> 
<body> 
    <div ng-app="test" ng-controller="controller"> 
    <table class="table table-bordered table-striped"> 
    <tr id="theader"> 
     <thead> 
     <th>Talk Title</th> 
     <th>Start Time</th> 
     <th>End Time</th> 
     </thead> 
     </tr> 
    <tr ng-repeat="item in returnedObj | dateFilter "> 
     <td>{{item.presentation.title}}</td> 
     <td>{{item.presentation.start_time | date: "h:mm a"}}</td>  
     <td>{{item.presentation.end_time | date: "h:mm a"}}</td> 
    </tr> 
    </table> 
    </div> 
</body> 
</html> 

JS

var app = angular.module('test', []); 
app.controller("controller", ['$scope', function($scope){ 

    $scope.returnedObj = [{"presentation":{"title":"Introduction to Algebra", 
             "persons":{"1":{"id":22,"start_time":"2017-05-19 08:00","end_time":"2017-05-19 08:20"}, 
             "speakers":[{"firstname":"Charles","lastname":"Hardin"}]}}}]; 
}]); 

    app.filter('dateFilter', function(){ 
     return function(item){ 
      var correctTimeFilter = item.filter(function(i){    
       if(i.presentation.start_time || i.presentation.end_time){   
        console.log(i.presentation.start_time.replace(/\s/g, 'T')); 
        console.log(i.presentation.end_time.replace(/\s/g, 'T')); 
        return i.presentation.start_time.replace(/\s/g, 'T'); 
        return i.presentation.end_time.replace(/\s/g, 'T'); 
       } 
       else 
        return null; 
      }) 
      return correctTimeFilter; 
     } 
    }); 
+0

nicht klar, warum Sie einen Filter für Array dafür benötigen. Auch 'start_time' ist in' persons' Objekt verschachtelt. Ist nur Ziel, Datum zu analysieren? – charlietfl

+0

Beachten Sie, dass es wahrscheinlich einfacher wäre, 'Personen' zu einem Array zu machen, wie' Speaker' – charlietfl

+0

Ich habe '$ scope.returnedObj' hier als Array angegeben, aber in meinem ursprünglichen Code stelle ich Tausende von Datensätzen dar, die so aussehen von PHP, das war json_encoded. Aber das Format sieht meiner ursprünglichen JSON-Zeichenfolge sehr ähnlich. – missgg

Antwort

0

Du liest gerade das Objekt falsch. Sie versuchen, Werte von dort zu erhalten, wo sie nicht sind.

Es ist viel sauberer, wenn Sie es wie folgt formatiert:

$scope.returnedObj = [{ 
    "presentation":{ 
    "title":"Introduction to Algebra", 
    "persons":{ 
     "1":{ 
     "id":22,"start_time":"2017-05-19 08:00","end_time":"2017-05-19 08:20" 
     }, 
     "speakers":[{ 
     "firstname":"Charles","lastname":"Hardin" 
     }] 
    } 
    } 
}]; 

Here das Snippet ist, die mit T leeren Raum in Daten ersetzt, wenn das ist, was Sie tun wollte.

Sie können auch nicht 2 Werte in der Reihenfolge zurückgeben, wie Sie es in der Filterfunktion versucht haben.

Verwandte Themen