Идентификатор отправки Angular RouteParams

Я пытаюсь отправить идентификатор контроллеру, используя $routeParams через фабрику, но он не работает.

Мой $routeProvider:

.when('/event/:eventId', {
    templateUrl : 'pages/event_detail.html',
    controller  : 'eventPageCtrl'
});

Моя фабрика:

myApp.factory('eventRepo', ['$http', function($http) {

    var urlBase = 'php/api.php';
    var eventRepo = {};

    eventRepo.getEvent = function (id) {
        return $http.get(urlBase + '?eventID=' + id);
    };

    return eventRepo;

}]);

Мой контроллер:

myApp.controller('eventPageCtrl', ['$scope', '$routeParams', 'eventRepo', 
        function ($scope, $routeParams, eventRepo) {

        $scope.getEvent = function (id) {
            eventRepo.getEvent($routeParams.eventId)
            .success(function (data) {
                $scope.eventsDetail = data;
            })
            .error(function (error) {
                $scope.status = 'Error retrieving event! ' + error.message;
            });
        };  

}]);

При обработке $http.get() внутри контроллера, а не с фабрикой, он работает нормально, поэтому я думаю, что неправильно передаю свои $routeParams? Возможно, эта строка вызывает проблему eventRepo.getEvent($routeParams.eventId)?

В настоящее время это работает, но попытка использовать $http.get() вне контроллера:

myApp.controller('eventPageCtrl', function($scope, $http, $routeParams) {

      $http.get("php/api.php?eventID="+$routeParams.eventId).success(function(data){
            $scope.eventsDetail = data;
           });
});

person RonnieT    schedule 20.05.2015    source источник
comment
Вы пытались запустить console.log $routeParams.eventId в $scope.getEvent?   -  person dfsq    schedule 20.05.2015
comment
Что на самом деле не работает? Проходит undefined? Что запускает функцию $scope.getEvent?   -  person Ben Felda    schedule 20.05.2015
comment
Ваш api.php получает eventID или eventId?   -  person Matias Fernandez Martinez    schedule 20.05.2015


Ответы (1)


как насчет использования resolve в вашем routeProver и возврата eventId, а затем внедрения его в controller .. пример:

$ маршрутпровайдер:

.when('/event/:eventId', {
        templateUrl : 'pages/event_detail.html',
        controller  : 'eventPageCtrl',
        resolve : {
                    eventId: function($route, $location) {
                        var eventId = $route.current.params.eventId;
                        return eventId;
    });

Контроллер:

myApp.controller('eventPageCtrl', ['$scope', 'eventId', 'eventRepo', 
        function ($scope, eventId, eventRepo) {   //add it as a dependency

        $scope.eventId = eventId;   //you can check this to see if its being assigned 
        $scope.getEvent = function (eventId) {     //Edit: eventId added here
            eventRepo.getEvent(eventId)            //Edit: eventId passed 
            .success(function (data) {
                $scope.eventsDetail = data;
            })
            .error(function (error) {
                $scope.status = 'Error retrieving event! ' + error.message;
            });
        };  

}]);
person Shehryar Abbasi    schedule 20.05.2015