Angular JS — сервис, возвращающий код функции в отличие от возвращаемого значения функции

#angularjs #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")

}());
 

Это контроллер, который вызывает службу продукта …

  (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 выводит следующее …

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

Ответ №1:

Да, у вас действительно есть синтаксическая ошибка, прямо здесь:

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

Это должно быть:

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

ОДНАКО это не приведет к регистрации списка продуктов, это приведет к регистрации объекта promise, который $http.get().then() и возвращает результат. Вам нужно перечитать документацию $http , а также прочитать больше об обещаниях и о том, как они работают. Ваш код нефункциональен как есть. В этой статье объясняется, почему: http://blog.ninja-squad.com/2015/05/28/angularjs-promises /