Angular JS - 返回函数代码而不是函数返回值

时间:2016-10-13 21:07:09

标签: angularjs service

我认为我的代码中存在语法错误,但我不完全确定。基本上当我在服务上调用一个函数时,它返回代码而不是函数的返回值。

这是服务......

(function (){
'use strict';

var products = function($http){

    var getProducts = function () {
        return $http.get(getDataUrl)
            .then(function (response) {
                return response.data;
            });
    };

    //Make functions public
    return {
        getProducts: getProducts
    };
};

var module = angular.module("shop");
module.factory("products", products);
module.constant("getDataUrl", "xxx")

}());

这是控制器而不是调用产品服务......

 (function () {
'use strict';

angular
    .module("shop")
    .controller("ProductController", ProductController);

function ProductController($scope, cart, $routeParams, products) {

    // $scope.product = products.getProducts;
    // console.log($scope.product);

    var productId = getProductIdFromUrl();
    console.log("productId: " + productId);

    console.log("products: " + products.getProducts);

    function getProductIdFromUrl(){
        return $routeParams.productId;
    }

}

})();

现在,而不是返回我期望的JSON数据,console.log只是打印函数代码。任何想法?

console.log打印以下内容......

 products: function () {
        return $http.get(getDataUrl)
            .then(function (response) {
                return response.data;
            });
    }

1 个答案:

答案 0 :(得分:4)

是的,你确实有语法错误,就在这里:

console.log("products: " + products.getProducts);

应该是:

console.log("products: " + products.getProducts());

HOWEVER 不会记录产品列表,它会记录一个承诺对象,这是$http.get().then()返回的内容。您需要重新阅读$http的文档,并阅读有关承诺及其工作原理的更多信息。您的代码按原样无效。本文解释了原因:http://blog.ninja-squad.com/2015/05/28/angularjs-promises/