Angular http工厂没有加载数据来查看

时间:2014-03-31 19:33:22

标签: javascript angularjs http

尝试设置Angular工厂/服务以使用API​​数据,因此我可以构建默认索引和显示页面。

我的问题是数据没有从工厂返回到控制器和视图。

我的第二个问题是,当我点击客户时,它应该再次查询API并返回相关客户。但是,我对如何通过customerID

传递routeParams感到困惑
app.factory('apiFactory', ["$http", "$routeParams", ($http, $routeParams) ->
  factory = {}

  factory.getCustomers = ->
    $http(
      method: "GET"
      url: "/customers.json"
    ).success( (data) ->
      data
    ).error( (status) ->
      console.log "Error"

  factory.getCustomer = (customerId) ->
    customerId = $routeParams.customerID
    customer

  factory
])

app.controller("CustomersController", ["$scope", "apiFactory", ($scope, apiFactory) ->
  $scope.customers = apiFactory.getCustomers()
  console.log $scope.customers

  $scope.customer = apiFactory.getCustomer
  console.log $scope.customer
])

在下面的示例中,我用静态json文件替换了url,但也没有运气。 这是相应的Plunker http://plnkr.co/edit/G6eFwR7uCNu32cLa1MvV?p=preview

2 个答案:

答案 0 :(得分:0)

我没有coffeescript专家,但看起来你的getCustomers函数正在返回一个承诺。所以你需要像这样调用它:

apiFactory.getCustomers().success( (data) ->
    $scope.customers = data);

你在getCustomers()中使用的成功处理程序并没有真正做任何事情,因为没有使用它的返回值。

如果您想在http请求返回之前阻止加载控制器,则需要使用resolve在路由中进行设置。

答案 1 :(得分:0)

正确的方法是使用.then()

factory.getCustomers = ->
$http(
  method: "GET"
  url: "/customers.json"
).then( (data) ->
  data;
).error( (status) ->
  console.log "Error"

在你的控制器中:

apiFactory.getCustomers().then(function(data) ->
    $scope.customers = data
);

.then允许您回复您的承诺并使用它!