我有以下工厂:
app.factory('clientFactory', function ($http) {
var factory = {};
factory.getClients = function () {
var url = "/tracker/api/client";
$http.get(url).then(function (response) {
return response.data;
});
};
factory.getClient = function (id) {
// TODO
};
factory.insertClient = function (firstName, lastName, city) {
// TODO
};
factory.deleteClient = function (id) {
// TODO
};
return factory;
});
控制器:
app.controller('ClientController', function ($scope, clientFactory) {
$scope.clients = [];
init();
function init() {
$scope.clients = clientFactory.getClients();
}
$scope.insertCustomer = function () {
// TODO
};
$scope.deleteCustomer = function (id) {
// TODO
};
});
在我的控制器中,'clients'始终为null。我尝试过其他几种方法,比如我看到的here,但是我得到了一个错误,即“无法在null上调用成功”,如果我将其超过该错误,则永远不会调用我的成功函数。
我在这里缺少什么?
答案 0 :(得分:1)
在您的控制器中,您将getClients
方法视为同步。请记住,当您执行$http.get
时,将返回承诺。您需要将该承诺返回给控制器,因此它可以使用将处理成功结果的方法调用.then
。
您的getClients
方法需要如下所示:
factory.getClients = function () {
var url = "/tracker/api/client";
return $http.get(url);
};
我相信您的init
方法需要看起来像这样:
function init() {
clientFactory.getClients().then(function(response) {
$scope.clients = response.data;
});
}
试试吧!