AngularJS工厂无法正常工作

时间:2014-03-14 21:06:53

标签: angularjs

我已经将我的工作代码从控制器抽象到工厂,但它似乎没有工作,我无法找到错误。我选择了工厂而不是服务,因为我想在返回该变量之前执行一些定义变量的代码;我想获得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";
  }
]);

a working example

3 个答案:

答案 0 :(得分:2)

试试这个:

.success(function(result) {
    angular.copy(result.station, station_list);
});

答案 1 :(得分:1)

你有一个小错误,你正在替换数组而不是填充它。我使用angular.copy而不是工厂中的赋值,它可以工作

http://plnkr.co/edit/sqgKcFZAcClmkfdXHhrz

答案 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;
  }
};