我有一个使用angular返回JSON对象的工厂。 $ http.get请求正在获取数据,因为我可以在console.log(data)中看到它。我也知道如果我将JSON对象硬编码到工厂中,控制器会接收数据并在视图中正确显示
我的问题是为什么override func touchesBegin(touches:NSSet, withEvent event: UIEvent) {
let reveal = SKTransition.flipHorizontalWithDuration(1.0)
// the number is the duration time. After you type . right behind SKTransition, you can choose other scene transition effect.
self.view?presentScene(NewGameScene,transition:reveal)
}
没有归还
数据到我的控制器,即使$ http.get得到它?
<input type="submit" value="View PO" onclick="generate()"/>
答案 0 :(得分:2)
你可能想要这样的东西:
.factory('countries', function($http){
var list = [];
$http.get('../test.json').success(function(data, status, headers) {
angular.copy(data, list);
})
return {
list: list
}
};
然后你可以像这样绑定到列表:
.controller('View2Ctrl', function ($scope, countries){
$scope.countries = countries.list;
});
另一种同样有效的方法是:
.factory('countries', function($http){
return {
list: function() { return $http.get('../test.json'); }
}
};
然后在你的控制器中:
.controller('View2Ctrl', function ($scope, countries){
$scope.countries = [];
countries.list().success(function(data) {
$scope.countries = data;
});
});
请记住,$http.get('../test.json')
已经是一个承诺,这就是为什么你可以在没有任何不必要的承诺/解决处理的情况下返回它。
答案 1 :(得分:2)
因为您没有从$http
请求中返回任何内容。
将您的代码更改为:
.factory('countries', function($http, $q){
return {
list: function(callback){
var d = $q.defer();
$http.get('../test.json').success(function(data, status, headers) {
console.log("success");
console.log(data);
//console.log(status);
d.resolve(data);
}).error(function(data, status) {
//console.log("error");
// console.log(data);
// console.log(status);
d.reject(data);
});
return d.promise;
}
};
答案 2 :(得分:1)
首先,最好使用then
和catch
代替success
和error
。这样你就可以获得$http
承诺的优势。
其次,您需要返回列表函数中的数据,如下所示:
$http.get('../test.json')
.then(function(response) {
return response;
})
.catch(function(response) {
console.log(response);
});
然后在您的控制器中,您只需要调用该函数:
$scope.countries = countries.list();
就是这样。
奖金:我是怎么做的。
在我的工厂里,我有获取集合和获取函数以及数据的数组变量。
.factory('countries', function($http) {
var service = {
fetch: fetch,
get: get
};
var countries = [];
return service;
function fetch() {
$http.get('../test.json')
.then(set)
.catch(function(err) {
console.log(err);
});
}
function set(data) {
countries = data;
}
function get() {
return countries;
}
});
加载控制器时,您可以调用fetch函数来获取所有国家/地区,如果您将get函数传递给控制器,只要您想获取已经获取的国家/地区,就可以调用它。这样,当您不需要国家时,您不会向国家/地区提出额外请求。你也可以获得制造单身人士的工厂的优势。这样,这些数据(国家/地区)将在您注入国家/地区的每个控制器之间共享,直到您从工厂删除或更改数据(或刷新页面)。
.controller('View2Ctrl', function ($scope, countries){
countries.fetch();
$scope.getCountries = countries.get;
});
现在在您的视图中,您可以调用get函数来获取国家/地区。
<div ng-repeat="country in getCountries()"></div>
答案 3 :(得分:0)
我认为您应该将更改称为$ scope.countries = countries.list();运行发送请求到服务器。