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

私のコントローラーでは、「clients」は常に null です。ここに表示されているような他のいくつかのアプローチを試しましたが、「null で成功を呼び出すことはできません」というエラーが発生し、そのエラーを過ぎても成功関数は呼び出されません。

ここで何が欠けていますか?

4

1 に答える 1

1

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

それを試してみてください!

于 2013-07-09T22:08:26.043 に答える