#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 /