javascript - 使用工厂和 Controller 返回数据

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

Controller :

app.controller('ClientController', function ($scope, clientFactory) {
    $scope.clients = [];

    init();

    function init() {
        $scope.clients = clientFactory.getClients();
    }

    $scope.insertCustomer = function () {
        // TODO
    };

    $scope.deleteCustomer = function (id) {
        // TODO
    };
});

在我的 Controller 中,“客户端”始终为空。我尝试了其他几种方法,例如我所看到的 here但我收到一个错误“不能在 null 上调用成功”,如果我克服了该错误,我的成功函数将永远不会被调用。

我在这里缺少什么?

最佳答案

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

尝试一下!

关于javascript - 使用工厂和 Controller 返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17559054/

相关文章:

javascript - 如何在特定情况下表现某事

javascript - 强制文本框或变量的长度

javascript - jquery 函数适用于 live,不适用于 on

javascript - css margin-left propery - 如何为各种浏览器指定

AngularJS在离开输入字段时将值发送到数据库

javascript - JQuery 日期选择器与自定义日期选择器

javascript - 在 ng-repeat 中动态应用格式化过滤器

javascript - 在 AngularJS 的两个地方使用同一个 Controller

javascript - 在 Angular 项目中可选择 jquery ui 的轻量级替代方案

javascript - 在“选择为”选项中插入输入文本