AngularJS: Как я могу создать собственный фильтр, который может преобразовывать числа строки в формат h: m? - PullRequest
0 голосов
/ 05 июня 2019

Я загружаю список фильмов в формате JSON, и каждый фильм имеет продолжительность. Фрагмент JSON:

"duration": "PT157M"

Эта длительность отображается в виде строки, где число - это длительность в мин. Как мне конвертировать число в формат "ч: м" например: 150 = "2:30", так что это в представлении?

Я пытался использовать javascript с фиктивными данными (чтобы посмотреть, работает ли он), но я предполагаю, что пользовательский фильтр умнее?

.controller('MovieController', ['$scope', 'MovieFactory',  
   function($scope, MovieFactory) {

MovieFactory.get().then(function(response) {

  $scope.movies = response.data;

  // extract numbers from string
  $scope.duration = 'PT150M';
  $scope.regex = /\d+/g;
  $scope.found = $scope.duration.match($scope.regex);
  console.log($scope.found);

  // convert number to hours:min
  function timeConvert(n) {
    $scope.num = n;
    $scope.hours = ($scope.num / 60);
    $scope.rhours = Math.floor($scope.hours);
    $scope.minutes = ($scope.hours - $scope.rhours) * 60;
    $scope.rminutes = Math.round($scope.minutes);
    return $scope.finalResult = $scope.num + " min = " + $scope.rhours + " hour(s) and " + $scope.rminutes + " minute(s).";
  }
  console.log(timeConvert($scope.found));

});

}]);

Вид:

<div ng-repeat="movie in movies">
 <p>Duration must be here: {{movie.duration}} </p> 
</div>

Я прочитал много документации, к сожалению, без удачи.

1 Ответ

0 голосов
/ 05 июня 2019

$scope.duration.match($scope.regex); возвращает совпадающие числа в виде массива с одним элементом (в данном случае это строка «150»).

Вы хотите что-то вроде этого: parseInt($scope.duration.match($scope.regex)[0]);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...