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

Using a factory and controller to return data

本文关键字:返回 数据 控制器 工厂      更新时间:2023-09-26

我有以下工厂:

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。我尝试了其他几种方法,就像我在这里看到的那样,但我遇到了一个错误,"成功不能在null上调用",如果我成功了,我的成功函数就永远不会被调用。

我在这里错过了什么?

在控制器中,您将getClients方法视为同步方法。请记住,当执行$http.get时,会返回一个承诺。您需要将该promise返回给控制器,这样它就可以使用一个处理成功结果的方法来调用.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;
    });
}

试试看!