1

Контроллер:Угловое 1: нг-повторить броски infdig ошибку

(function(angular) { 

    var app = angular.module('t2w'); 

    app.factory('httpq', function($http, $q) { 
     return { 
      get: function() { 
       var deferred = $q.defer(); 
       $http.get.apply(null, arguments).success(deferred.resolve).error(deferred.resolve); 
       return deferred.promise; 
      } 
     } 
    }); 

    app.controller('JobsCtrl', ['$scope','httpq','baseUrl', function($scope, httpq, baseUrl) { 

     httpq.get(baseUrl + '/jobs/json').then(function(data) { 
      $scope.jobs = data; 
     }).catch(function(data, status) { 
      console.error('Error', response.status, response.data); 
     }).finally(function() { 
     }); 

     $scope.random = function() { 
      return 0.5 - Math.random(); 
     }; 
    }]); 

})(window.angular); 

Вид:

... 

<tbody> 
    <tr ng-repeat="job in jobs | orderBy:random"> 
     <td class="jobtitle"> 
      <a href="#jobs/{{job._id}}"> 
       {{job.title}} m/w 
      </a> 
      <p> 
       {{job.introText | limitTo: 150}}... 
      </p> 
     </td> 
     <td> 
      {{job.area}} 
     </td> 
    </tr> 
</tbody> 

... 

JSON ответ:

{ 
    "_id": "5880ae65ff62b610h4de2740", 
    "updatedAt": "2017-01-19T12:17:37.027Z", 
    "createdAt": "2017-01-19T12:17:37.027Z", 
    "title": "Job Title", 
    "area": "City", 
    "introText": "Lorem Ipsum Sit Dolor", 
    ... 
} 

Ошибка:

angular.js:13920 Error: [$rootScope:infdig]

Может кто-нибудь дать мне подсказку, почему я получаю эту ошибку? Уже проверена документация, и я не вызываю функцию в своем ng-repeat или не создаю новый массив с каждым вызовом.

+0

Можете ли вы показать значение $ scope.jobs'? –

+1

Я думаю, что это порождает ошибку, потому что 'random' на самом деле является функцией. Попробуйте без 'orderBy' –

+0

$ scope.jobs = Array (20) 0: Объект 1: Объект 2: Object ... ... – mrks

ответ

1

Что я сделал, чтобы решить проблема заключается в том, чтобы сортировать массив случайным образом в контроллере, а не на вид:

function shuffle(array) { 
    var currentIndex = array.length, temporaryValue, randomIndex; 
    while (0 !== currentIndex) { 
     randomIndex = Math.floor(Math.random() * currentIndex); 
     currentIndex -= 1; 
     temporaryValue = array[currentIndex]; 
     array[currentIndex] = array[randomIndex]; 
     array[randomIndex] = temporaryValue; 
    } 
    return array; 
} 

$scope.jobs = shuffle($scope.jobs); 
2

Если вы хотите ng-repeat сортировать данные случайным образом вам придется применить свой собственный фильтр, как это:

.filter('shuffle', function() { 
    return function(ary) { 
     return _.shuffle(ary); 
    } 
}); 

следующего использования его в целях, как это:

<tr ng-repeat='job in job | shuffle'> 
+0

Сбрасывает '[$ rootScope: infdig]' с этим фильтром. – mrks

+0

[здесь] (https://plnkr.co/edit/Xy7AjgJQZYCOEOFEaNVD?p=preview) работает plunker –

+0

Я предполагаю, что проблема в том, что у меня есть один массив с несколькими объектами. Поэтому поэтому решение для фильтра в случайном порядке все еще не работает. – mrks