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

Cla*_*z77 3 service angularjs

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

这是服务...

(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")

}());
Run Code Online (Sandbox Code Playgroud)

这是控制器,而不是调用产品服务的控制器。

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

}

})();
Run Code Online (Sandbox Code Playgroud)

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

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

 products: function () {
        return $http.get(getDataUrl)
            .then(function (response) {
                return response.data;
            });
    }
Run Code Online (Sandbox Code Playgroud)

Pop*_*ash 5

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

console.log("products: " + products.getProducts);
Run Code Online (Sandbox Code Playgroud)

应该是:

console.log("products: " + products.getProducts());
Run Code Online (Sandbox Code Playgroud)

但是,这不会记录产品列表,而是会记录一个promise对象,这$http.get().then()将返回结果。您需要重新阅读有关的文档$http,还需要阅读有关承诺及其工作方式的更多信息。您的代码无法按原样运行。本文介绍了原因:http//blog.ninja-squad.com/2015/05/28/angularjs-promises/