1

Controller:angulaire 1: NG-repeat lance erreur 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); 

Vue:

... 

<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 Réponse:

{ 
    "_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", 
    ... 
} 

Erreur:

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

que quelqu'un peut me donner une idée pourquoi je reçois cette erreur? J'ai déjà vérifié la documentation et je n'appelle pas de fonction dans mon ng-repeat, ni génère un nouveau tableau avec chaque appel.

+0

pouvez-vous afficher la valeur '$ scope.jobs'? –

+1

Je pense qu'il provoque une erreur car 'random' est en fait une fonction. Essayez sans 'orderBy' –

+0

$ scope.jobs = Array (20) 0: Objet 1: Objet 2: Object ... ... – mrks

Répondre

1

Ce que je l'ai fait pour résoudre le problème est de trier le tableau au hasard dans le contrôleur et non dans la vue:

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

Si vous voulez ng-repeat pour trier les données vous au hasard devez appliquer votre propre filtre comme ceci:

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

prochaine utilisation en vue comme ceci:

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

Lance toujours '[$ rootScope: infdig]' avec ce filtre. – mrks

+0

[ici] (https://plnkr.co/edit/Xy7AjgJQZYCOEOFEaNVD?p=preview) fonctionne plunker –

+0

Je suppose que le problème est, que j'ai un seul tableau avec plusieurs objets. C'est pourquoi la solution de filtre shuffle ne fonctionne toujours pas. – mrks