控制器:
(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错误:[$ rootScope:infdig]
有人可以给我一个提示,为什么我会收到此错误?已经检查过文档,我没有在ng-repeat中调用函数,也不会在每次调用时生成一个新的数组。
答案 0 :(得分:2)
如果您希望ng-repeat
随机对数据进行排序,则必须按照以下方式应用自己的过滤器:
.filter('shuffle', function() {
return function(ary) {
return _.shuffle(ary);
}
});
接下来就像这样使用它:
<tr ng-repeat='job in job | shuffle'>
答案 1 :(得分: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);