我如何通过工厂从 angularjs 中赋值

How can I assign value from angularjs by factory

首先我有这样的工厂:

app.factory('getApiUrl', function (httpq, $q) {

    var obj = {};
    obj.getResponse = function (hurl) {
        var promise = $q.defer();

        httpq.get(hurl).then(function (data) {
            //obj = data.data;
            promise.resolve(data.data);
        })

        return promise.promise;

    }
    return obj;
});

然后我创建控制器并像这样调用工厂:

app.controller('mainController', function ($scope, httpq, $q, getApiUrl) {
    $scope.message = "Main Content";
    var namees = new Array();
    var testc = getApiUrl.getResponse(hurl);
    $scope.names = testc.data;
});

但它不起作用。

getResponse方法returnspromise object。您需要在解决响应时提供回调。那么正确的用法是:

app.controller('mainController', function ($scope, httpq, $q, getApiUrl) {
    $scope.message = "Main Content";
    var namees = new Array();
    getApiUrl.getResponse(hurl).then(function(data) {
        var testc = data;
        $scope.names = testc.data;
    });
});

作为旁注,您还应该摆脱服务中多余的 $q.defer,因为 httpq.get(hurl) 已经是一个承诺:

obj.getResponse = function (hurl) {
    return httpq.get(hurl).then(function (data) {
        return data.data;
    });
}