Angularjs$http.get()。 JSON 来自服务器
Angularjs $http.get(). JSON fron server
我尝试显示部分服务器列表,但不明白为什么他没有将它们写入 array.I 尝试将其推送到数组然后在 html 中显示
使用 ng-repeat,但它不起作用,因为我还没有尝试过。
var app = angular.module('myApp', []);
app.factory("demoFac", ['$http',function($http){
var obj = {};
for(id = 10; id < 16; id++){
obj.fetchUserDetails = function(){
return $http.get('http://jsonplaceholder.typicode.com/photos/' + id);
}
return obj;
}
}]);
app.controller('customersCtrl',function(demoFac){
var Picture = this;
Picture.list = [];
demoFac.fetchUserDetails().success(function(response){
Picture.list.push({id: response.id,title:response.title, url: response.url, thumbnailUrl: response.thumbnailUrl})
});
console.log(Picture.list);
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="customersCtrl as Picture" ng-cloak>
<div ng-repeat="x in Picture.list ">
<h4>{{'id:'+x.id}}</h4>
<h3>{{x.title}}</h3>
<h4>{{x.url}}</h4>
<h4>{{x.thumbnailUrl}}</h4>
<img ng-src="{{x.thumbnailUrl}}">
<img ng-src="{{x.url}}">
</div>
</div>
我尝试了不同的方法但结果都是一样的,不明白我妈妈做错了什么?
它实际上不为空,如果您看到网络选项卡,则响应带有 1 个元素。它显示为空,因为在调用成功回调时,console.log
语句已经以初始值执行作为 [].
我知道那么为什么它第一次显示 1 个元素,不管你信不信打开它们或类似的东西后记录。我以前遇到过同样的问题,并在其中一个答案中找到了这个东西。
只是为了证明 运行 在 Firefox 中,您总是会发现日志为空数组。
此代码将解决您的问题:
var app = angular.module('myApp', []);
app.factory("demoFac", ['$http', '$q',
function($http, $q) {
var obj = {};
obj.fetchUserDetails = function() {
var promises = [];
for (id = 10; id < 16; id++) {
var promiss = $http.get('http://jsonplaceholder.typicode.com/photos/' + id);
promises.push(promiss);
}
return $q.all(promises);
}
return obj;
}
]);
app.controller('customersCtrl', ['demoFac',
function(demoFac) {
var Picture = this;
Picture.list = [];
demoFac.fetchUserDetails().then(function(response) {
for (var i = 0; i < response.length; i++) {
Picture.list.push({
id: response[i].data.id,
title: response[i].data.title,
url: response[i].data.url,
thumbnailUrl: response[i].data.thumbnailUrl
});
}
});
console.log(Picture.list);
}
]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="customersCtrl as Picture" ng-cloak>
<div ng-repeat="x in Picture.list ">
<h4>{{'id:'+x.id}}</h4>
<h3>{{x.title}}</h3>
<h4>{{x.url}}</h4>
<h4>{{x.thumbnailUrl}}</h4>
<img ng-src="{{x.thumbnailUrl}}">
<img ng-src="{{x.url}}">
</div>
</div>
您将 fetchUserDetails 设置为仅获取最后一项(ID:15),因为您在 for 循环中一遍又一遍地重置 obj.fetchUserDetails。我所做的是将 for 循环移动到 fetchUserDetails 中,并将每次调用的所有承诺收集到 $q.all() 的单个承诺中。新的统一承诺已在 customersCtrl 中使用。一旦所有的承诺都得到解决,统一的承诺就会生效。
我尝试显示部分服务器列表,但不明白为什么他没有将它们写入 array.I 尝试将其推送到数组然后在 html 中显示 使用 ng-repeat,但它不起作用,因为我还没有尝试过。
var app = angular.module('myApp', []);
app.factory("demoFac", ['$http',function($http){
var obj = {};
for(id = 10; id < 16; id++){
obj.fetchUserDetails = function(){
return $http.get('http://jsonplaceholder.typicode.com/photos/' + id);
}
return obj;
}
}]);
app.controller('customersCtrl',function(demoFac){
var Picture = this;
Picture.list = [];
demoFac.fetchUserDetails().success(function(response){
Picture.list.push({id: response.id,title:response.title, url: response.url, thumbnailUrl: response.thumbnailUrl})
});
console.log(Picture.list);
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="customersCtrl as Picture" ng-cloak>
<div ng-repeat="x in Picture.list ">
<h4>{{'id:'+x.id}}</h4>
<h3>{{x.title}}</h3>
<h4>{{x.url}}</h4>
<h4>{{x.thumbnailUrl}}</h4>
<img ng-src="{{x.thumbnailUrl}}">
<img ng-src="{{x.url}}">
</div>
</div>
我尝试了不同的方法但结果都是一样的,不明白我妈妈做错了什么?
它实际上不为空,如果您看到网络选项卡,则响应带有 1 个元素。它显示为空,因为在调用成功回调时,console.log
语句已经以初始值执行作为 [].
我知道那么为什么它第一次显示 1 个元素,不管你信不信打开它们或类似的东西后记录。我以前遇到过同样的问题,并在其中一个答案中找到了这个东西。
只是为了证明 运行 在 Firefox 中,您总是会发现日志为空数组。
此代码将解决您的问题:
var app = angular.module('myApp', []);
app.factory("demoFac", ['$http', '$q',
function($http, $q) {
var obj = {};
obj.fetchUserDetails = function() {
var promises = [];
for (id = 10; id < 16; id++) {
var promiss = $http.get('http://jsonplaceholder.typicode.com/photos/' + id);
promises.push(promiss);
}
return $q.all(promises);
}
return obj;
}
]);
app.controller('customersCtrl', ['demoFac',
function(demoFac) {
var Picture = this;
Picture.list = [];
demoFac.fetchUserDetails().then(function(response) {
for (var i = 0; i < response.length; i++) {
Picture.list.push({
id: response[i].data.id,
title: response[i].data.title,
url: response[i].data.url,
thumbnailUrl: response[i].data.thumbnailUrl
});
}
});
console.log(Picture.list);
}
]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="customersCtrl as Picture" ng-cloak>
<div ng-repeat="x in Picture.list ">
<h4>{{'id:'+x.id}}</h4>
<h3>{{x.title}}</h3>
<h4>{{x.url}}</h4>
<h4>{{x.thumbnailUrl}}</h4>
<img ng-src="{{x.thumbnailUrl}}">
<img ng-src="{{x.url}}">
</div>
</div>
您将 fetchUserDetails 设置为仅获取最后一项(ID:15),因为您在 for 循环中一遍又一遍地重置 obj.fetchUserDetails。我所做的是将 for 循环移动到 fetchUserDetails 中,并将每次调用的所有承诺收集到 $q.all() 的单个承诺中。新的统一承诺已在 customersCtrl 中使用。一旦所有的承诺都得到解决,统一的承诺就会生效。