如何按工厂分配angularjs的值

如何按工厂分配angularjs的值,angularjs,angularjs-factory,Angularjs,Angularjs 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

首先我有这样的工厂:

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;
});
然后我创建控制器并调用工厂,如下所示:

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
方法返回。您需要在响应得到解决时提供回调。正确的用法是:

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(hull)
已经是一个承诺:

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

它不起作用,我只是试试这个。
hurl
没有定义。您还使用了承诺反模式:即使有错误,您返回的承诺也不会被拒绝。函数体应该是
returnhttpq.get(hull).then(function(response){returnresponse.data;})。阅读它的工作原理,但为什么不能像一些var testc=getapirl.getResponse(hurl)那样使用它;因为我在angularjs中看到一些sourcode使用类似的方式,例如,因为您正在发出AJAX请求,这是一个异步操作。代码只是不“等待”直到响应加载并简单地返回“未定义”。因此,您需要使用回调或承诺。查看更多详细信息。我只是尝试:obj.getResponse=function(hull){return httpq.get(hull)。然后(function(data){return data.data;});}@chinguyen您发布的示例使用angular 1.0.1,它用于支持在视图表达式中使用承诺。很长一段时间都不是这样了。1.0.1为3,5岁。我们现在是1.4.8。好吧,我犯了个错误,因为我刚刚阅读并研究了有关angular的内容,谢谢。