1

我有以下工厂:

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
    };
});

在我的控制器中,“客户”始终为空。我已经尝试了其他几种方法,就像我在这里看到的那样,但是我得到了一个错误,“无法在 null 上调用成功”,如果我通过了那个错误,我的成功函数就永远不会被调用。

我在这里想念什么?

4

1 回答 1

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;
    });
}

试试看!

于 2013-07-09T22:08:26.043 回答