2017-02-08 12 views
0

Я не могу заставить эту работу работать. Я пытаюсь заменить любое пустое пространство буквой «Т», чтобы преобразовать мою строку в формат даты, но я не могу заставить ее работать. Мой массив работает, когда я console.log и вижу, что это формат yyyy-MM-ddTHH: mm. Но когда я устанавливаю соединение с фильтром ng-repeat, он ничего не делает. Вот мой код и ссылку на JSbin https://jsbin.com/nesedenoce/edit?html,js,console,outputУгловой фильтр для замены строки в 3d-массиве

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

непонятно, зачем вам нужен фильтр на массиве. Также 'start_time' вложен в объект' people'. Целесообразно только анализировать дату? – charlietfl

+0

Обратите внимание, что, вероятно, было бы легче сделать 'person' массив также способом' speakers' – charlietfl

+0

Я поместил '$ scope.returnedObj' в массив, но в моем исходном коде я помещаю тысячи записей, которые выглядят так от PHP, который был json_encoded. Но формат выглядит очень похоже на мою оригинальную строку json. – missgg

ответ

0

Вы читаете ваш объект неправильно. Вы пытаетесь получить значения, откуда они не находятся.

Это намного чище, когда вы форматируете это следующим образом:

$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 является фрагмент кода, который делает заменить пустое пространство в датах с T, если это то, что вы хотите сделать.

Также вы не можете вернуть 2 значения в последовательности, как вы пробовали в функции фильтра.

 Смежные вопросы

  • Нет связанных вопросов^_^