Передайте путь URL в $ http get url- AngularJS

0

Я пытаюсь получить значение из части URL, в мой запрос http http getURL. Я пробовал несколько решений (например, HTML5mode), но не имел успеха.

Вот мой код:

angular.module('myapp123.products', [])


.factory('productsApi', ['$http', '$location',
    function($http, $location){

        var BASE_URL = 'http://stashdapp-t51va1o0.cloudapp.net/api/item/';

        return {
            get: getApiData
        };

        function getData() {
            var product_id = $location.path().split("/")[3] || "Unknown"; //URL = /#/product/id/1234 <---
            return $http.get(BASE_URL + product_id);
        }
    }]
)

.controller('productsCtrl', ['$scope', '$log', 'productsApi', 'UserService',
    function($scope, $log, productsApi, UserService) {

        $scope.isVisible = function(name){
            return true;// return false to hide this artist albums
        };

        // <======  Rewrite with accounts preferences
        productsApi.getApiData()
            .then(function (result) {
                //console.log(JSON.stringify(result.data)) //Shows log of API incoming
                $scope.products = result.data;
            })
            .catch(function (err) {
                $log.error(err);
            });
    }
]);
Теги:

1 ответ

0

Код в вашем примере содержит много синтаксических ошибок. Вот как это должно выглядеть, основываясь на том, что я думаю, что вы собираетесь...

angular.module('myapp123.products', [])
    .config(locationConfig)
    .factory('productsApi', productsApiFactory)
;

locationConfig.$inject = ['$locationProvider'];
function locationConfig($locationProvider) {
    $locationProvider.html5Mode(true);
}

productsApiFactory.$inject = ['$http', '$location'];
function productsApiFactory($http, $location) {
    var BASE_URL = 'http://stashdapp-t51va1o0.cloudapp.net/api/list/';

    return {
        get: getData
    };

    function getData() {
        var product_id = $location.path().split("/")[3] || "Unknown";
        return $http.get(BASE_URL + product_id);
    }
}

В этой версии функция конфигурации правильно определена для настройки html5mode и фабрика услуг настроена на использование $location каждый раз, когда вызывается метод get().

Вы должны использовать службу в контроллере следующим образом:

ExampleController.$inject = ['productsApi'];
function ExampleController(productsApi) {
    productsApi.get()
        .then(function onSuccess(res) {
            // handle successful API call
        })
        .catch(function onError(err) {
            // handle failed API call
        })
    ;
}
  • 0
    Спасибо - мне нужно что-нибудь сделать с моей разметкой HTML (с помощью Base)? Я изменил $ locationProvider.html5Mode на requireBase: false.
  • 0
    Я не уверен, что понимаю ваш вопрос. Я не видел ваш HTML-шаблон и не знаю, чего вы пытаетесь достичь, но это должно ответить на ваш первоначальный вопрос о том, как передать путь URL в запрос $ http get.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню