我已经将我的工作代码从控制器抽象到工厂,但它似乎没有工作,我无法找到错误。我选择了工厂而不是服务,因为我想在返回该变量之前执行一些定义变量的代码;我想获得result.station
(API返回的部分数据),而不是完整的结果。
这是我的代码:
var app = angular.module("myApp", []);
app.factory('api', ['$http',
function($http) {
var station_list = [];
$http({
method: 'GET',
url: 'http://api.irail.be/stations/?format=json&lang=nl'
})
.success(function(result) {
station_list = result.station;
});
return {
Stations: function() {
return station_list;
}
};
}
]);
app.controller("myController", ['api', '$scope',
function(api, $scope) {
$scope.station_list = api.Stations();
$scope.title = "Stations";
}
]);
答案 0 :(得分:2)
试试这个:
.success(function(result) {
angular.copy(result.station, station_list);
});
答案 1 :(得分:1)
你有一个小错误,你正在替换数组而不是填充它。我使用angular.copy而不是工厂中的赋值,它可以工作
答案 2 :(得分:0)
问题是你正在处理AJAX的异步性质。
我建议在控制器中使用delegate
方法,该方法将在服务调用完成时调用。
如下所示:
app.controller("myController", ['api', '$scope',
function(api, $scope) {
api.Stations( function(station_list) {
$scope.station_list = station_list;
});
$scope.title = "Stations";
}
]);
以下是服务方法摘录:
return {
Stations: function(delegate) {
if (delegate)
delegate(station_list);
return station_list;
}
};