AngularJS: $ routeParams для работы в сервисе

0

Я знаю, что это легко, но я не могу полностью обвести голову, как это сделать.

Мне нужно выполнить вызов API внутри службы, чтобы эти переменные можно было получить между двумя отдельными контроллерами.

У меня проблема: я не могу получить доступ к $ routeParams (который мне нужен для получения) внутри службы. Я не могу понять, как передать $ routeParams от контроллера к сервису.

    app.controller('Main', ['$scope', 'Page', '$routeParams', '$http', function($scope, Page, $routeParams, $http) {
    $scope.Page = Page;
}]);

app.controller('Pages', ['$scope', 'Page', '$routeParams', '$http', function($scope, Page, $routeParams, $http) {
    $scope.Page = Page.posts;
}]);

app.factory('Page', ['$routeParams', '$http', function($routeParams, $http) {
    var posts = function posts() {
        $http.get('wp-json/wp/v2/pages/?filter[name]='+ $routeParams.slug).success(function(res){
            console.log(JSON.stringify(res) );
        }); 
    };
            var description = '';
            var title = '';
            return {
                title: function () { return title; },
                setTitle: function (newTitle) { title = newTitle; },
                description: function () { return description; },
                setDescription: function (newDescription) { description = newDescription; },
                posts
        }; 
}]); 
  • 0
    С точки зрения разделения интересов, я бы сказал, вместо этого передать объект с извлеченными параметрами $ routeParams внутри него. Это предотвратит попадание проблем уровня представления в уровень обслуживания.

1 ответ

0

завод:

app.factory('Page', ['$http', function($http) {
        var _posts = function posts(param) {
          return  $http.get('wp-json/wp/v2/pages/?filter[name]='+ param);
        };
                var description = '';
                var title = '';
                return {
                    title: function () { return title; },
                    setTitle: function (newTitle) { title = newTitle; },
                    description: function () { return description; },
                    setDescription: function (newDescription) { description = newDescription; },
                    posts : _posts
            }; 
    }]); 

Контроллер:

app.controller('Pages', ['$scope', 'Page', '$routeParams', '$http', function($scope, Page, $routeParams, $http) {
    Page.posts($routeParams.slug).then(function success(response) {
       $scope.Page = response.data;
}, function error(reason) {
// do something
});
}]);

обратите внимание, что success устарел в новых версиях Angular. Я обновил код, then

  • 0
    Это абсолютно идеально, спасибо большое.
  • 0
    прохладно. Пожалуйста, отметьте как "ANS" и проголосуйте, чтобы помочь другим.
Показать ещё 1 комментарий

Ещё вопросы

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