【发布时间】:2014-02-26 03:24:15
【问题描述】:
我有一个 URL,我从中挑选 Chuck Norris 笑话。基本上为了得到 100 个笑话,我点击了 URL 100 次并将结果存储在一个数组中并执行 ng-repeat。很直接。当我在谷歌浏览器上执行相同的代码时,问题就来了。它只是获取第一个命中的数据,然后不命中 URL 并用第一个数据填充整个数组。我不明白为什么同一代码有两种不同的行为。请帮忙。它在 Firefox 中完美运行,但在 google chrome 中无法运行。 您可以在 Fiddle 上找到代码。尝试在 Chrome 和 Firefox 上运行相同的代码,您会注意到不同之处。请帮忙。
代码如下:-
var app=angular.module('JokeApp',[]);
/**
* Created by roger on 25/2/14.
*/
app.controller('JokeCtrl',['$scope','$http','$q',function($scope,$http,$q){
$scope.pageTitle="JokeApp";
$scope.data={"jokeList":[]};
$scope.services={};
$scope.processing={};
$scope.processBusy=true;
$scope.dataTemplate=function(id,joke,category){
return {
"id":id,
"joke":joke,
"category":category
};
};
$scope.getJoke = function(callback) {
return $http.get("http://api.icndb.com/jokes/random?limitTo=[nerdy]").success(
function(data) {
return callback($scope.dataTemplate(data.value.id,data.value.joke,data.value.categories[0]));
}
);
};
$scope.getJokes = function () {
var prom = [];
for(var i=0;i<10;i++){
prom.push($scope.getJoke(function(value){
$scope.data.jokeList.push(value);
}));
}
$q.all(prom).then(function () {
console.log("DONE!!!");
console.log($scope.data.jokeList);
$scope.processBusy=false;
});
};
$scope.getJokes();
}]);
HTML 就像
<div class="container-fluid" ng-app="JokeApp" ng-controller="JokeCtrl">
<table class="table-responsive" ng-show="!processBusy">
<thead>
<tr>
<th>ID</th>
<th>Joke</th>
<th>Categories</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="data in data.jokeList">
<td>{{data.id}}</td>
<td>{{data.joke}}</td>
<td>{{data.category}}</td>
</tr>
</tbody>
</table>
</div>
</body>
【问题讨论】:
标签: javascript angularjs google-chrome firefox angularjs-ng-repeat