我是Angular和Ionic的新人, 我想建立一个从googleapis获得一个Json的工厂, 并包含两个函数,一个返回所有元素,另一个返回参数中传递索引的元素。
我试着这样做:
厂:
angular.module('starter.services', [])
.factory('Noticias', function($http,$q) {
var deferred = $q.defer();
$http.get("http://ajax.googleapis.com/ajax/services/feed/load", { params: { "v": "1.0", "q": "http://www.furg.br/bin/rss/noticias.php", "num":"10" } })
.success(function(data) {
entries = data.responseData.feed.entries;
deferred.resolve(entries);
})
.error(function(data) {
console.log("ERROR: " + data);
});
var noticias = deferred.promise;
console.log(noticias);
return {
all: function() {
return noticias;
},
remove: function(noticia) {
noticias.splice(noticias.indexOf(noticia), 1);
},
get: function(noticiaId) {
for (var i = 0; i < noticias.length; i++) {
if (noticias[i].id === parseInt(noticiaId)) {
return noticias[i];
}
}
return null;
}
};
});
我在控制台中得到了这个,但我想要的是&#34;值&#34;在控制器。
Promise {$$state: Object, then: function, catch: function, finally: function}$$state: Object
status: 1
value: Array[10]
0: Object
1: Object
2: Object
3: Object
4: Object
5: Object
6: Object
7: Object
8: Object
9: Object
length: 10
__proto__: Array[0]
__proto__: Object
__proto__: Object
答案 0 :(得分:1)
noticias
是一个承诺。并且您的所有方法都使用它,就像它是一个数组一样。不是。这是一个承诺。
因此,方法get
例如应为
get: function(noticiaId) {
return noticias.then(function(array) {
for (var i = 0; i < array.length; i++) {
if (array[i].id === parseInt(noticiaId)) {
return array[i];
}
}
return null;
});
}
并且get()方法的用户应该像这样使用它:
service.get(i).then(function(element) {
// do something with element
});
另请注意,您定义承诺的方式是反模式。如果http请求失败,则永远不会拒绝noticias
承诺。使用承诺链:
var noticias = $http.get("http://ajax.googleapis.com/ajax/services/feed/load", { params: { "v": "1.0", "q": "http://www.furg.br/bin/rss/noticias.php", "num":"10" } })
.then(function(response) {
return response.data.responseData.feed.entries;
});
答案 1 :(得分:0)
我相信你想这样做:
ProgressDialog progressDialog = new ProgressDialog(getActivity());
progressDialog.setMessage("[YOUR MESSAGE]");
progressDialog.setCancelable(true); // Check as required
progressDialog.show();*/
答案 2 :(得分:0)
我的解决方案: 基于:https://stackoverflow.com/a/33023283/5424391
angular.module('starter.services', [])
.factory('Noticias', function($http,$q) {
var noticias = $http.get("http://ajax.googleapis.com/ajax/services/feed/load", { params: { "v": "1.0", "q": "http://www.furg.br/bin/rss/noticias.php", "num":"20" } })
.then(function(response) {
return response.data.responseData.feed.entries;
});
return {
all: function() {
return noticias.then(function(array){
return array;
});
},
get: function(noticiaIndex) {
return noticias.then(function(array) {
return array[parseInt(noticiaIndex)];
});
}
};
});