尝试设置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
答案 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
允许您回复您的承诺并使用它!