我有一个工厂返回一个对象,调用一个包含JSON的内部资源,如下所示:
.factory('cardFactory', function ($q, $http) {
return {
getOtherStuff: function () {
var deferred = $q.defer(),
httpPromise = $http.get('/static/cards.json');
httpPromise.then(function (response) {
deferred.resolve(response);
}, function (error) {
console.error(error);
});
return deferred.promise;
}
};
});
在我的控制器中,我称之为:
var cardSuccess = function(data, status, headers, config) {
$scope.cards = data.data;
};
cardFactory.getOtherStuff()
.then(cardSuccess, cardError);
在填充的浏览器$ scope.cards中,但在设备上它不会填充。
任何想法为什么?
答案 0 :(得分:1)
我在Ionic app中以不同的方式使用它,效果很好。
.factory('cardFactory', function ( $http ) {
var promise;
var cards = {
getOtherStuff: function() {
if ( !promise ) {
// $http returns a promise, which has a then function, which also returns a promise
promise = $http.get( '/static/cards.json' ).then(function (response) {
// The then function here is an opportunity to modify the response
// The return value gets picked up by the then in the controller.
return response.data;
});
}
return promise; // Return the promise to the controller
}
};
return cards;
})
然后,在控制器上,通过以下方式调用它:
$scope.getData = function() {
// Call the async method and then do stuff with what is returned inside our own then function
cardFactory.getOtherStuff().then(function(d) {
$scope.cards= d;
});
}
$ scope.getData();
希望它有所帮助。
[编辑:]可能是$ http.get网址,是相对的吗?你试过绝对的网址吗?
答案 1 :(得分:0)
将$ scope.cards = data.data替换为“$ scope.cards = data”
var cardSuccess = function(data, status, headers, config) {
$scope.cards = data;
};
答案 2 :(得分:0)
尝试删除网址中包含$ http的前导斜杠。尝试使用' static / cards.json'而不是' /static/cards.json'
我实际上遇到了同样的问题,这对我来说已经解决了。希望它有所帮助!