使用工厂和控制器返回数据

时间:2013-07-09 22:01:23

标签: javascript angularjs

我有以下工厂:

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上调用成功”,如果我将其超过该错误,则永远不会调用我的成功函数。

我在这里缺少什么?

1 个答案:

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

试试吧!